Category: Writing

  • All Grocery Stores in Canada

    This is a list of all major grocery chains’ locations in Canada

    Locations were gathered between July 24 and Aug. 1, 2026. Included are: Walmart, Costco, NorthMart, Giant Tiger, Co-Op, Arctic Co-Op & all the sub-brands of Empire Co. Ltd, Loblaws and Pattison Food Group.

    Get the CSV file with the addresses:

    Or see them on a map (full-screen map here):

    Notes

    Locations were collected from the grocery retailers’ own sites: either from the “find a store” tool on their site (majority), by enumerating all store IDs to discover active locations (Walmart – the 1000-2000, 3000-4000 and 5000-6000 ranges only), or through the XML sitemap on the site. These methods could be out of date or not updated to reflect openings/closures.

    If you analyze this data and discover – for example – that there is a food desert in a certain Halifax neighbourhood, then go to Google maps and verify that that’s indeed the case. Double-check your work with that second source.

    These are only the largest grocers – communities are additionally served by smaller grocery stores (sometimes as large as Galleria/C&C/Tone Tai here in Toronto, sometimes as small as a corner store).

    I don’t think that all Giant Tigers and Walmarts sell food – the map makes the rough assumption that they all do.

    An interesting article that I found as part of this research about the two towns with the highest food prices in Nunavut. It helps think through factors like the presence of grocer competition / complementary businesses when it comes to affordability.

  • Felix and I

    In my memory it’s always the same picture:

    He is young – twenty four – sitting at the black computer table by the wall of his living room. I’m looking at him side-on. He’s silhouetted by the huge window with a gorgeous view of the neighbourhood church. Green trees outside. The sun is shining brightly.

    It’s summer. Probably “The Hot Summer”, when our friends G and C came over to hang and see what he was working on. This was at the one-bedroom apartment where he lived on his own for the first time. There was a small fan struggling to hold back the 35 degree heat. It was 20cm in diameter so it was ineffective – it was phenomenally hot and still a good time. He was showing all of us something on the computer screen.

    When he built that desktop he used a mini-motherboard, aiming at a small form factor. But at the last step, when it came time to buy the case, only a comically-large one was available. He took it. This compromise grated on him but it was a pragmatic way to finish the build and move on to what he really wanted.

    Felix and I really wanted to be millionaires by 30.

    We were going to get there by starting a website empire. Many e-commerce businesses at the time had an “affiliate program”. The idea was that you joined and drove visitors to their website – by hook or by crook – and any money those visitors spent with the merchant generated an 8% commission for you. The typical affiliate would select just a few products to promote on their personal blog.

    Our business’ premise was more niche: as part of these affiliate programs, some merchants also shared their entire product selection as a “datafeed”. This would allow you to pull all their products and promote them en-masse. Back in 2010, programming skills were rare enough that you could successfully use this datafeed to generate your own e-commerce site, and have it outrank the original merchant on Google. Visitors would come to your “clone” site first, and when they clicked the “buy” button they’d be taken to the original merchant’s site. You’d collect your 8% for anything they bought there.

    If you think this business was lucrative then you are mistaken.

    A successful cloned site would only make $100 per year. But that could still be profitable if your costs for the site were less then that. Typically just the $10 for domain registration. If you could make 100 websites, 200 websites, 500 websites at scale – then we’re talking real money. This is where I came in.

    I had done a proof-of-concept for the idea. Then built a platform that allowed a single person to create the kind of vast network of sites necessary. The only hitch was that – despite the datafeeds giving us all product titles, photos and descriptions – building each site still took manual work.

    We’d start by finding an e-commerce merchant with a datafeed AND a site so badly coded that our own clone could outrank them on Google. We’d smooth out all the quirks in the datafeed (each datafeed had its own technical problems. That’s why few affiliates worked with datafeeds.) We’d then classify this list of products into categories – just like what you’d expect from a site’s navigation bar. Our days were spent in this loop of research, building, and in hustling for links to sites by writing articles for syndication.

    I took the year off to pursue this idea. I lived off savings from a job I got straight out of school, one at a digital ad network. The first challenge was psychology. Each site took a day to build – how could we keep motivated to build a hundred of them? 

    The answer was a large Bristol Board with 100 circles drawn on. Each circle would become a website. As we completed one, Felix and I would place a funny sticker in the middle and write the site’s domain underneath.

    Slowly, we built out decorcurtains.com, scrapbookstarter.com, beddingforcribs.com and discountboatshoes.com.

    As we manually categorized products, Felix became an expert in different types of adhesive tape available on the market (did you know “gaffer’s tape” is the ultimate multi-purpose tape? Way better than duct tape?). I discovered the world of womenswear (if you’re a tall girl, try a “sun dress”. If you like layering, try a “bolero”).

    It was a beautiful summer in Toronto. Young and loving the downtown energy, I was going on dates and meeting a whole lot of disinterested women.

    And then my love life caught a lucky break. Her name was A. She was clever and beautiful – short, pale, black haired. A was a cool girl – a DJ at CIUT, a university radio station for which I had a soft spot.

    You see, CIUT solved a 6-year mystery for me. I was a 10 year-old growing up in the middle east, and one night I was secretly listening to the radio past my bedtime. An unforgettable tune came on. Like a transmission from a futuristic Egyptian civilization. Unfortunately, there was no way to discover the name for this type of music. Frustratingly, over the next years as an immigrant in Canada, I’d hear it often in TV commercials. So close and yet out of reach. Later on, now as a highschooler listening to CIUT in the small hours, they finally put a name to the style: Drum n’ Bass. This opened a door to the music that I loved and to finding my true self. But that’s another story.

    A and I kept going on dates. I’d take her to see Delorean. She’d treat me to a Black Angels concert where we hopped outside to share a joint with her coworkers. The Black Angels made sinister music and my heart beat fast (“oh, that weed was definitely laced with something”, A said).

    Despite living in a hip market district, A ate all her meals out. “It’s more affordable to do that than to cook your own food!”, was her logic. Felix and I laughed about it. He was shopping at that same market district once a week and knew it was way cheaper to cook at home. He’d rumble with his wire cart 20 minutes there, do a round at his favourite shops, clump that cart down the stairs of the cavernous basement supermarkets in Chinatown. He developed some mean stir-fry recipes.

    At night, Felix and I would go out drinking at one of the indie bars in his area. He was one of the early gentrifiers in the West Queen West neighbourhood, so we had a glut of hip hole-in-the-wall places to choose from. It was a time of good rock, good electro, and Cut Copy, Ladyhawke and Radio Dept. were the background music to our days. Walking home from the bar on humid nights – the smell of lilacs lingering in the air far longer than it does in daylight. I will always remember those songs when I think of Felix. The same way you associate a trip abroad with the albums you were obsessed with at the time.

    I couldn’t stop looking at A, I was infatuated. But the chemistry was just not there between us: when I asked if I could kiss her for the first time, she was taken aback. “Don’t ask me. Just do it.”

    Dear reader, I strongly believe in showing courtesy and giving a woman space. This makes me profoundly unsexy. Over the years I’ve come to understand that, if a woman is ok with this, then that’s a strong indicator of compatibility. A and I stopped dating. I suspected she’d be disappointed in the other men she’d find out there.

    Creating the websites every day was boring work. I would maintain our morale by celebrating made-up milestones. From “hey we finished our first website!”, to celebrating the fifth website (“we’re one twentieth of the way there!” to the 30th website being “almost a third of the way there!”. And – of course – the celebration of the 33rd website which marked the actual one-third mark.

    As summer turned into fall I was failing at online dating. You see, my problem was that I was 24.

    Younger women were looking for a much older man than them. With money and a cool lifestyle.. Say, a 27 year old.

    Women my age were looking for a moderately older guy. Someone who’s 27.

    Women older than me were definitely looking for someone their own age. A 27 year-old.

    There was only one thing for me to do if I ever wanted to find a partner. I had to become 27.

    So I lied.

    And after a few awkward dates with more mature women – “What do you do for a living?”, umm… I’m a Boy Genius? – I finagled a date with M.

    M and I met on the street where my old digital ad network job was. I shook her hand, and quickly followed with: “let’s get out of here, all my old coworkers hang around here and I don’t want to run into any of them.” We went for ‘po boy sandwiches and paid for our own meals. We then went for a walk that ended by lake Ontario. It was nice. M was pretty and quiet. I’ve always thought that the quietest person in a room is often the smartest. And I’ve been on enough bad dates at that point to know that “a nice date” is actually a way-above-average date.

    That’s why I asked her out again. And at that second date (lubricated by beer) the conversation flowed. We both loved Star Trek: TNG and had a similar taste in electronic music. She was a Fashion Design student and I imagined her making garish avant-garde nonsense. Like big balloon outfits that engulf a person’s body.

    Date number 3 was at Stones’ Place, dancing to some good music and chatting on the couches at this just-slightly-gungy bar. That’s the date when M put together my sisters’ age, the gap between us, and the fact that I was 27 – and smelled a liar liar pants on fire.

    I don’t know what went through M’s head when I told her that I was busy “being an entrepreneur” taking two years off work. 

    It was September. We hit 50 websites. “That’s halfway there baybee”!

    Out with M and her friends at an “Asian Fusion” restaurant1, I got a text from A. She’d reconsidered and wanted to see me again. I thought about the alternative timeline here. A choice between someone who’s quiet and slow-burning versus seeing through an unfinished story with someone I was infatuated with. Maybe it wasn’t even a trade-off at all. M and I weren’t exclusive. I loved pursuing multiple options.

    I didn’t text back.

    Felix and I were submitting our generated sites to online directories. Adding features to the platform so they’d rank higher in Google. We implemented a custom analytics system (we wouldn’t use Google Analytics – can’t let the Big Bear know these sites are all related). The money was trickling in – 73 cents commission paid by hobbypartz.com,  $4.95 from fabric.com, $2.2 from undergroundhiphop.com.

    In December, we hit the 100 website milestone. Sixteen years later, I don’t remember how we celebrated but we must’ve done so. That year we made $1,300 on expenses of $1,800.

    The consolation was that it was money we made out of nothing. And we were building an asset. And it was going to be a future passive income stream.

    In 2011, Felix and I stayed “in business” but did not grow our network of sites. I remember tweaking things and experimenting with variations of the designs. All to try and encourage more clicks on the “buy now” button. I could see that we had several new competitors running the same play. Their techniques for ranking were more risky and more effective than ours: creating vast numbers of sites by using “temporary domain” services instead of paying for each domain name.

    I was conservative and insisted that we don’t stoop to this level. I also insisted that we avoid putting paid ads on our sites, thinking that we should keep our visitors 100% focused on clicking the “buy” button. I took on Freelance work for extra cash. This side income allowed me to stretch my savings for much longer than I expected.

    I had a lot of extra time on my hands and decided to get into coffee as just something to do. I’d frequently go to the hip 3rd-wave cafes that were opening up in Felix’s neighbourhood. Taking a book to read, I’d insist on always ordering an Americano. My logic being that it’s such a simple drink that there was “nowhere to hide” if a barista wasn’t hitting the high notes.

    One favourite was a combination menswear and cafe run by 3 friends, each working there part-time. It had kickass Americanos for $2. I called it “Coffee / Clothes”, but M would point out that this wasn’t its actual name. It was just one of the phrases stuck on their window and more catchy than the cafe’s true name: Lost & Found.

    My relationship with M was developing slowly. We listened to Miniature Tigers and Com Truise. She introduced me to GRUM. We were seeing each other once a week despite being always free on an entrepreneur’s and student’s schedule. I needed a lot of space away from people.

    In April, M invited me to watch the fashion show that served as her program’s graduation. That was the first time I’ve seen any of her designs. The models with her collection were last to go down the runway – a place of honour closing out the show. Her clothes were geometrical, futuristic but flattering. I really liked them!2

    That year, I made $5,300 from the websites and freelancing.

    Felix and I were restless to make more money. And that meant adding more websites. So early in 2012 I set out to recruit an intern to increase our capacity. I ended up at a “Students For Startups” event hosted by a nearby university. This was a kind of speed-dating event where students in the Entrepreneurship program would talk with founders, and both parties could choose each other for an internship.

    There were 8 entrepreneurs and 16 students at the event. And a twist:

    Each entrepreneur could only choose one student. Each student could only select one entrepreneur. If you didn’t match then there was no internship.

    It was high-stakes, and I had to spot talented students while schmoozing them with a story of why they should do repetitive labour for us on websites that hardly brought in any cash.

    There was one student who stood head and shoulders above all the rest. She was clearly ambitious and capable. She already had her own business, making jewellery and selling it online. With her understanding of e-business and my ability to teach her all the digital marketing and tech tricks, the benefits of working together were undeniable.

    There was just one complication: I found her very attractive. Both physically and her entrepreneurial streak. Remember, I was going to be a millionaire by 30. We were on the same wavelength. It was going to be the Dream Team. I just knew it in my weaselly little bones.

    Dear reader, today I may be wise and a paragon of good behaviour, but at 25 I knew that I couldn’t just keep it professional. So I had to think about the slow-burning relationship I was in, and the exciting possibilities of an alternative path – listen, I wasn’t even doing anything, it was pure optionality, you heard of optionality yeah?

    I decided to keep out of trouble.

    My choice was the second-strongest student in the room, D. He was a brash guy who talked the talk and had a focus on entrepreneurship that very few in business school have.3 And D chose me as well!

    Afterwards, the administration sent me an email: D wasn’t supposed to be in that room. He wasn’t enrolled in the co-op entrepreneurship course at all. They didn’t even know if he even wanted to enter the course. Wow – D had moxie.

    D ended up interning for us. I showed him how to organize the datafeeds of thousands of products into categories. And then he went to work. I would send him new work assignments by email. We would meet every two weeks to review his progress.

    Surprisingly, D was terrible at his job.

    He was slow to populate the sites with products. What’s more, during our meetings he’d constantly pester me with probing questions about my business decisions. Why did I build things this particular way? Why not put advertisements on the websites? How come it takes so long to create each site? Are you reselling these domains as a supplemental income stream?

    I had very good reasons for every decision. And here was this student playing Big Business Consultant when he can’t even do his assigned work on time. Sheesh.

    D was my first encounter with a rare type of person. I’ve only met two others like him in my life. These people are:

    • Terrible at day-to-day execution and require lots of support from others.
    • Big visionaries, they explore cutting-edge ideas that push others out of their comfort zone.
    • Big gossips – constantly informing you of what others in the organization are working on.
    • Politicians who try to influence things at a level they haven’t reached yet.

    These people’s qualities match only one role you’d see in a corporation. People in that role do no hands-on work and have to rely on experts for that. Their job is to over-communicate a certain message. They are paid to think ahead and push others to change in uncomfortable directions. That role: CEO.

    People like D are born CEOs.

    The tragedy is that, despite their innate skills for the top, they still need to climb many rungs of drudgery to earn their place there. Most of them will become casualties of the journey. Unless they are spotted and supported.

    D’s co-op period ended. I was dismissive of his advice but Felix was open to it. Felix already had an inkling that my approach was too conservative. Eventually, I ended up implementing all of D’s recommendations. He lit a fire under me. D taught us that the key to our business was volume – standing up new websites as fast as possible. So why were we focusing so much on quality, which was holding us back?!

    I recoded the platform so that it would auto-categorize products into “good enough” buckets, and I stopped spending so much time picking the perfect domain name for each site. We created the next 100 websites in a fraction of the time it took us to create the first hundred. We put ads on the sites. Instead of distracting visitors, they doubled revenue.

    The business was succeeding. But I was losing interest. I got a contract job an hour and a half away. I’d invited M to move in with me. We were listening to Twin Shadow and Childish Gambino. We even managed to see the first tour of a mysterious Toronto musician before he got globally famous. I had to move my clothes out of the bedroom and into a hallway closet to make space. I’d change frenetically in that hallway before going to work. It was hard to share my home with M. The truth is, I was jealous of Felix. He still had his freedom and I could see the cage coming down on me.

    Was life so difficult because of M or would it be equally challenging to live with any other person?
    I did a lot of soul searching. I decided that I’d have the same problems living with anyone after I’d tasted life on my own. After all, we’re talking about the guy who needed so much space he’d only see his new girlfriend one day a week.

    Living with M, I realized that some things will never change. That they are a permanent part of the deal in having M in my life. At the pace of molasses, this attractive, creative, crazy funny woman kept revealing herself to me. I don’t think that I’ll ever fully know her. And I don’t want to: I still don’t know her birth name. Only the one she chose for herself.

    I got a permanent job. And then another. M and I got married. There was less time to do what I wanted and more time spent coordinating, tiptoeing, compromising. But, even with my day job, I could still squeeze in time in the evenings to learn a new programming language. Two months before M was due with our first child,I decided I’d had enough of my consulting job, and went freelance. I’m sure she loved that. 

    When our son was born I was hustling for customers, looking for another job, and waking up to feed him at 4:30am every day. I hated the demands of fatherhood. I felt like I’d died and left a ghost to walk the earth. Echoing that Bristol Board with the hundred circles, I’d tell myself: “I am seeing the sunrise with my son. This is good. A good experience together”. I cried on the kitchen floor when no one was around.

    Time passed and I landed a good position with managerial responsibilities. There was no more learning of programming languages and no more hobby projects. I felt resentful that my time was being swallowed up by responsibilities to others4. I constantly talked about wishing to write up a specific accomplishment at work, if only I had time. Finally, M told me that I’ve been ruminating about this writeup so much that I need to go get it done. She’ll make uninterrupted time for me to work on it. Because of her, I wrote the damn thing. This was my first long piece of writing. And a first step in a journey I can see only in retrospect.

    We moved 3 times in 3 years.

    When we finally felt like we had a handle on life, we welcomed our daughter into the world. Instead of a hollow ghost I was now an enraged demon.

    Throughout the years I thought frequently about Felix.

    I would always remember him in that room. I’m watching him side-on in front of that massive window. The room is filled with furniture his mother bought him when he moved out: the black couch, black computer chair, black TV stand, black TV. “Do this for your own children when they move out”, she said. She taught him how to cook basic meals in that first apartment of his. Loved and uncomplicated.

    It is now 1am. I passed out while putting our daughter to sleep and woke up again. It’s a daily routine that usually takes an hour. It’s been 7 years now. And 7 years since I slept alone with my wife in our bed. First there was a baby between us. Then a little girl. Then a Big Girl.

    It’s 1am and I’m shuffling in groggy with my hair sticking out where it flattened against the mattress. At the dining table, M is sitting with her pottery. If anyone has a more regrettable relationship with sleep than I, it is her. She’s holding a little bisque-fired vase and putting down white glaze. Then pink. I tell her that I am struck by inspiration to write. But if I get on the computer now, I’ll be fucked tomorrow.

    “Go for it”, she says. “You don’t have work tomorrow and you can take a midday nap”.

    Felix is still twenty four.

    I am almost forty. 

    Not a ghost anymore. M has me loving IVE and Cukak’s remixes through sheer force of repetition.

    I am not a demon. Recently, I played Altın Gün for M. But I figured she’d hate it because the singing would annoy her. And I was right! Hah!

    I am just an ordinary perpetually irritated man. Going through a mid-life reinvention. With a brain like Swiss Cheese from years of sleep deprivation. My son recently told me his favourite song is The Look.

    I sneak time away to write and code in the evening. Parenting is less demanding, but I haven’t grown to like it. It’s like: if you feed me a BIG tablespoon of shit every day and then switch to just a little teaspoon daily, I won’t suddenly start liking the taste of shit.

    Felix and I went our separate ways. He’s working on his own projects, never slowed down by responsibility to others. Still listening to hip music. Having coffee in that downtown neighbourhood that’s so different from the sleepy, middle-aged, middle-achieving, mid-town neighbourhood where I live. Nothing ever happens in my neighbourhood. I can’t even get a croissant on a Monday because the local shopkeepers decided it’s now a day of rest.

    Do you have a Felix in your life?

    I think we all do. We all have a shadow version of ourselves that, as we got middle-aged and weighed down, that version just stayed young and effervescent and kept living life.

    I often think about Felix’s freedom.

    But my memory plays tricks on me. I never told you about it being so lonely in that apartment that I cried5. I never lashed out at anyone, hungry and angry that they broke my concentration. But that was because there was nobody there but me. Never made it as an entrepreneur. When I think of that time, it’s a Forever Summer. I don’t remember the Winters. I bet they sucked, cooped up indoors with the next boring website that needed building. Cufflinks! Horse Bridles! Vibrating Cockrings!

    I think the most honest thing we can do for our Felixes is to dive further into the fantasy. To flesh out the details of their life. Make them concrete.

    When I think about Felix’s partner or children, I can’t help but picture a life similar to my own. Because he also wanted children. He wanted a partner. He wouldn’t have stayed in that neighbourhood. And anyways, that place is not the same as it was sixteen years ago.

    Felix probably made choices akin to my own. Made compromises. The only alternative I can imagine to compromise, accommodation, negotiation is to never allow yourself to love.

    It’s 5:30am now. The sun is beginning to rise.

    M had gone to sleep 3 hours ago and I am all alone.

    Sometimes I sit there and think that I am lucky. So very very lucky.

    I feel it in my weaselly little bones.


    1. When you eat at an Asian Fusion restaurant, it is your way of saying: All Asians are the same. All those countries and ethnicities? They’re all just part of one simple place called “Asia” (I kid, I kid!) ↩︎
    2. Years later I managed to archive a video recording of that show. M doesn’t know that I have it. And, don’t worry, she won’t find out despite me writing about it here. Because the best place to hide something from your wife is to put it on your blog! ↩︎
    3. During my own business degree, after a particularly difficult final exam in Accounting, I asked a classmate: “Did you like this course?”. He replied “I guess. 
      ‘Cause I’m going to have to be an Accountant after I graduate.” He said this in a resigned tone. Business School is where independent thought went to die. There was little interest in Entrepreneurship at that time. ↩︎
    4. Between your boss, your employees, your spouse, kids and parents – roughly 100% of your time will be committed to other people. In order to spend any time doing what you want, you’ll inevitably have to disappoint someone. ↩︎
    5. Listen, I am a verymanly man and rarely cry. Despite what the multiple instances of crying in this post would have you believe. ↩︎
  • Proof Of Care in the Age of A.I.

    Proof of Care in the Age of A.I. – Jacob Filipp Now, the same lengthy Pomeranian piece could’ve been blooped out by a bot in 1  0 seconds flat. Impossible to tell if any effort went into writing it. This ease makes it hard to connect with others over shared interests, and harder still to convince people to change their mind about an issue. A . I. is making it easier than ever for people  to put the ir t hough ts into writ i ng. A nd tha t’s a problem. In this document , I will review the l atest ways in which people are restorin g trust in their work in a noisy post-LLM world. Ways of demonstrating that effort went into their message . Ways of proving they care. One-To  -M any, O nline The simplest wa y to make a message effortful is to hand- write it. It takes time to write out thousands of words and there are no shortcuts. It’s tedious. It hurts. It even works for short messages . Try it now: think of a quip you’d like to post to Socia  l Media. Write it out on paper. Take a photo and post tha t. I guarantee that your message wil l hit home be t ter than if you’d written  it digit ally. You can add “extras” that make the task more difficult. For exam  p le, you can manua  ll y ref l e c t each le t t er o f the wr i tte n mess  age. I have only seen a few people do this becau s e i  t make s the te x  t  ha r d e r to rea d at a g  lan c e. Bu t, pe  rhaps, t h a t kin d of fr ic  t io n is w e l co  me in ou r skim-  it-  an d -  fo rg  e t - i t mo d e r n w o r  l  d  ? One interesting qua li ty of handwriting is that you can apply it to LLM  - generated text  by tracing the output of an A.I. tool. The act  of rewriting by hand still proves that you cared enough abo  ut a ma tt er to rise above  ju st copy- pasting the text. O ne  - To  - M a ny,    O ff l i ne Your photo of a handwritten message proves  that you cared enough to write the message  once. But how do you make it effortful to share a genuine message at-scale ? One solution is to hand-write many flyers and distribute them on the street. A physical f lyer  ,  handed out by a living human being , is w ay more effective than a message on a social media feed. The core skill for this approach is to keep  things short: when you hand - write 1,000  flyers you bet ter use the fewest words that  get your message across. If you don’t want  a wrist injury , th at is !  U nfortunately, the Rich and M oderately   Rich have co- opted this handwriting approach  to lobby for their interests in a way that  looks “ organic”. They use machines ca lled  Pen Plotters to make imitation handwritten  flyers at scale. These can have all the   imperfections and variations of the real thing.  Down to having one-of- a - kind fonts created from a particular person’s handwriting . A carte l of bu sinesspeople can pass these flyers over to dozens of gig-workers , who in turn hand them out at various town centres. Over the past three years, the public had smartened up to the use of plotters and this led to the invention of new proof-of-care indicators.  T  a  t t o o s One way to broadcast one’s thoug hts is to   get a big bold ta t too.  By permanen tly writing a mess age into one’s body, tattoos show an unfakeable conviction. What’s more, tattoos display a message to everyone in the vicinity without having to exert constant effort. For as long as real tattoos can be distinguished from the fake thing they remain a good way of proving commitment. They are most practical in places with temperate climate. The key with tattoos is to keep the message a) short and b) evergreen. This message will adorn your body forever so it can’t be something you’ll rethink in the next twenty years. This is easier said than done! Who among us hasn’t seen a young lady with “Meat is murder” down the middle of her torso, or a young man on his hustle with a “ Grind Hard” message across his forehead ? I’m sure that they’ll regret their choice when they are older and their priorities sh if t  ! S tory tellers One unf a keable way to rea ch an a udience  is to shout your message at a busy place.  This harks back to “Speakers’ Corner” in   Hyde  Park   in London, and to other such   spots that were popular un ti l the late  twentieth century. I have personally seen  more people in North American cities shouting   out in public. There is also a rise in the number of people I can only describe  as “  Town Criers”, moving on foot through   a city and spreading true news to  counteract all the false news on the Net.   I believe that this greater use of in-person  communication is part of a migration from the Online World back into the Physical  World. This wave will only intensify over  the next five years Between cities, travelling storytellers are reportedly plying a route and sitting down with the townsfolk to share tales. I hear that this is how the I liad and Odyssey were  first transmitted. Except now, it is more like  Julius Caesar’s autobiographical books: each  story is not just entertaining but aims  to telegraph a message about a person or  initiative.  Story telling requires adapting a message to  rhyme and repetition. The storyteller can’t just read out prepared text, either: the story needs to be adjusted to match the energy of  the listeners, to their identity and to the setting.  One would tailor a story differently whether  the audience are office workers, warehouse  labourers or a group of nurses who’d just  gone off-shift. The challenge with the above is that  regional oligarchs will undoubtedly hire and train people to spread their own propaganda. That’s why the storytellers form guilds and initiate members with a trial in pain, written in the body. A young man typically  becomes a Storyteller by having his skin  cut with razors, row on row, and getting  burnt wood ash rubbed into the wounds. The ceremony itself is painful, and the four-week  recovery is even more so. When they heal, the scars form raised patterns like alliga tor  scales. A young woman usually becomes  a Storyteller by having an artist carve ornate shapes into her face with a bone  chisel.  When telling a story, the listeners can tell   at a glance whether a Storyteller is “the real  deal” and has not been bought. S ubtraction The most extreme means of emphasizing one’s message is by mutilating the body. Some businessmen  in The East may cut off their own ear to  sea l a Billionaire Elevation Deal, or a critical  political marriage. Closer to home , in Designated European Warzone II and in the Euphrates Crucible, we have the practice of government ministers underscoring a declaration of war by cutting off a finger.  Body mutilation is a gesture of unquestionable  commitment. And it gets attention. It is   egalitarian in that it is available even to the   poorest of people. But, I believe, there is  an “escaltion effect” here that will land  people in the same position as the Tibetan  protestors from previous decades, dousing themselves in gasoline and lighting themselves aflame. When you start one-upping each other, there is only one destination where this practice  can lead.  This kind of Proof of Stake is mostly done by followers of the Witch Priestess from the North, and loyal readers of my blog alread y  know that I hold her in low esteem. I ncreasing the bandwidth What’s common to all the methods we reviewed so far is that they are low bandwidth. Short messages you can shout and handwritten flyers are bad at transmitting complex ideas . In past times, this is when the speaker would pen an essay or write a book on a subject,z but A.  I. has made those formats suspect.  I n order to dive deeper into an idea, people have begun to schedule face-to-face gatherings that last one or two hours . And why restrict yourself to talking ? To get the message across, communicators are now performing with their whole body – a dance, a song, a play, or something in between. Smell, touch and taste, too, increase the surface area for their message.  I f a digital video call  is higher-bandwidth than reading a document; if an in-person group  presentation is higher-bandwidth than video; and a 1-on-1 conversation is even higher… then what is  higher-bandwidth than that ? You’d have to do something extreme to your  brain to cram in more content. And that’s  exactly where the cutting edge is: today’s youth are using psychedelic drugs to kick the gates of communication wide open. First, one would gather an audience and have them ingest mind-altering drugs. Then, put the listeners into a cozy and safe environment perhaps sitting around a fire. The communicator could speak the message aloud. Or, they could push the limits of communication by also ex aggerating their facia l expressions, moving the arms and feet in extreme gestures , by adding  layers of drum music. F rom there it is a short step to painting your body, adding feathers , masks and dancing. Those in the vanguard aim to get the most “juice” from those hours together. Drugs prime the mind for maximal intake.  On any given night, on the outskirts of  our larges t cities, you can find young  people having a genuine dialogue by dancing around burning bonfires, bodies a black silhouette, feathered masks shaking. I n this bizarre digital age of Artificial Intelligence, there is just one thing that I can say for sure: The kids are allright Proof of Care in the A ge of A .I. Previously, if you created a 4,000 - word b log post abou t Pomeranians, people could a ssume that here was a person who really cared a bout dogs. Fine – may be the qua lit y of the wr iting was imperfect – but the sheer effort it took to write so much was proof t hat you reall y cared abou t this topic. Not any more. Proof of Care in the Age of A.I. – Jacob Filipp
    Click here to see the “how this was made” feature

    I wrote this piece by hand and photographed the pages. After that, I wanted to make the text copy-pasteable. So I put the images into one SVG file with a text overlay:

    Pictured: overlaid + spaced out text. Notice the ` spacers and extra spaces.

    The font (Barlow Condensed – Italic Condensed) and the line height roughly match my handwriting’s dimensions. For spacing, the idea was that I’d add spacing characters that’ll be removed in Javascript during the copy-paste event that fires on the webpage.

    I used ` (backtick) characters for narrow spaces that’ll be fully removed, and multiple spaces between words where I planned to collapse them into just 1 space. The hyperlinks are made using Inkscape’s Create Anchor functionality.

    After exporting the SVG file, it required some post-processing:

    • Embedding the font using <style>
    • Replacing the ` characters with Six-per-em Space characters so the backticks don’t show up when selected
    • Replacing the linked local image filepaths with full URLs

    Finally, the SVG is fully added as an <svg> element into the HTML file. I couldn’t trigger on-copy Javascript events if I embedded it as an <object>.

  • What to do with Your Big Ugly Concrete Column

    All over North America, developers are building condominiums with big rounded concrete pillars smack in the middle of the room.

    These columns block the view, block the flow and aren’t practically useful for anything – you can’t even screw shelves into them!

    Here is a list of ideas for what to do with that Big Hulking Column in your life:

    Mount a TV on it

    This is the #1 most common use for the pillar that I’ve seen. Condomounts.com supplies these strap-mounted TV brackets for attaching a TV to pillars:

    They also supply these little strappable shelves:

    Tie fabric around it

    In this Reddit thread, user simon1024 shared that they tied fabric from IKEA around the column using a rope. In the photo, you can also see that the clock is held up with a string that goes around the column.

    If you are looking to attach fabric to the top of a column, consider using baling wire, Strapping (requires special tools for tensioning and sealing), an Endless Ratchet Tie-Down (doesn’t require tools) or even jumbo Velcro straps. Leave extra fabric at the top of the column, and fold it over the strap to hide it from view.

    Installing plain strapping
    An Endless Ratchet Tie-Down – costs about $50
    There are also cheaper options.

    Colour and texture

    You can paint the column. Especially if it is bare concrete.

    Things get more interested with wallpaper. You can surround it with removable wallpaper or even cover it with vinyl tile wallpaper for an effect like this:

    Make sure to test with a small-ish patch to make sure the vinyl tiles are flexible enough to bend around the pillar’s diameter, while sticking firmly. You could also actually tile the column if you’re some sort of Mr. Moneybags 😝

    If you own the unit, you can use adhesive to wrap rope all around the column. Use an appropriate adhesive – likely Polyurethane construction adhesive – to glue the rope in place. Consider also threading hooks through the rope. They can serve as points to attach baskets or hanging plants.

    Go wild by creating a “Michelin Man” effect around the column by purchasing a lot of Pool Noodles, gluing them around the column and painting. Be sure to test the glue and paint on the pool noodle, because they may contain chemicals that’ll dissolve the noodle.

    Pool noodles

    You can go further and surround the pillar with flexible “acoustic wall panelling” like this product from MSI Stone:

    Finally, you can spice up a plain column by gluing flexible mouldings around the base and top to make it look like an ancient Roman column. Look for a product called “flexible cornice” or “polyurethane moulding”, and make sure it is the flexible variety that can curve to any diameter.

    Flexible mouldings from Elite Trimworks

    Climbing plants

    If you decide to cover the pillar with jute or rope, then you’ll be able to add climbing plants in pots at the bottom. The rope will allow the plant to easily climb up the pillar.

    Use this fantastic reference from Fassaden Grun to pick the appropriate type of climbing plant. You could skip the rope altogether by planting a Self-Clinging Plant like Engelmann Ivy! (note: it will permanently mar the surface of the column)

    Objects around / against the column

    Prop a “shelf ladder” against the column. Think of ways to attach it to the column in a stable way. You may need to use a saw to cut an appropriate-diameter indent in the shelves so that the ladder doesn’t slide off the column’s cylindrical surface.

    Depending on the diameter of your pillar, one of these furnishings could fit neatly beside it. You can use them as seating, as a on-level bookshelf, or stack them vertically to create a tall semicircular bookshelf.

    You can also create a frame that’s suitable for attaching shelves by a children’s “Climbing Arch” sideways. The key is to make sure you have the right diameter for your pillar.

    Cover it up

    You can glue 2″x4″ bits of lumber to the column vertically, which would allow you to drill into the wood and hang pictures, add hooks and lightweight shelves.

    You could also fully cover your column with wood up to the ceiling like this:

    You could also use plywood panels or acoustic panels.

    If you “box in” the column completely, with panels that screw into each other on each side, then that could support sturdy bookshelves.

    “Straparound” shelves

    Use a combination of ratcheted tie-downs and loose shelf supports to create a shelf all around like @thesorrygirls on Instagram did in the linked video.

    You don’t have to mess with custom-made semicircular wooden shelves like they did (Mr. Moneypants 🤑). You can install more brackets at waist height an stack books flat on top of them – in that way, the surface of the books will become the bookshelf itself.

    For a more basic “straparound” setup, use a Timber Hitch Knot to hang up “sliding kitchen hooks” around your column.

    You could also go real deep and design a sort of product prototype around all this 😁:

    Thanks for reading!

    If you want more ideas, check out this great thread on Facebook.

    Note: I don’t have a rounded column in my own home. I’m just shocked at how many of them I see in high-rise units. I’m hoping this page of tips will improve the world by removing a little annoyance from a lot of people’s lives.

  • Low-Poly Art

    Did you know that you’re allowed to make real-world acrylic art that looks like a glitchy Playstation game from the early 00s????

    This post will expose you to artists who are doing just that. It started as part of the regular “links post” for July 2026, but got big enough to stand on its own.

    I’ve been enjoying the low-poly N64 world of Gao Hang:

    Artist Sasha Yazov lives rent-free in my mind. (Here is his CV with more photos of his work). He is an airbrush & acrylic artist, and likes to show the world through impossible angles – like a bug’s-eye-level look at people’s legs. More of Sasha’s work on Instagram @sashayazov.

    Julius Hofmann from Germany makes drawings from a fictional computer game. Many more pictures on his portfolio site (Note: later years’ work gets more adult/explicit).

    The above artwork is similar to the work of an artist I featured previously, Lulu Lin:

    Late 90’s aesthetic from Romanian artist Lucian Prună:

    Source

    Heading into the digital realm now:

    Artist Jack McVeigh doesn’t just make low-poly digital art:

    There are several animations at @jackmcv.art

    Although McVeigh makes digital works of art, he will also sell you a physical porcelain statue like this! 👇

    Related: artist Kyle Hill recreates Birmingham as a PS1 fever dream, on G.URL

    Source

    I hop you enjoyed!

  • Links for July

    Yooooo, have you heard of Altın Gün?! It’s a Turkish psychedelic band from the Netherlands.

    Last month I heard their music playing at Rooster Coffee House (one of Toronto’s best cafes), and it was so fresh that I’ve been listening to their albums on a loop:

    Check out the track Cemalim, too.

    My only previous exposure to Turkish singing has been through the band She Past Away. If a secret little goth heart doth beat under your lace undershirt, then you should be listening to them. It sounds like… if The Cure was a Harkonnen band.

    Low-Poly Art

    Did you know that you’re allowed to make physical airbrush art that looks like a glitched out Playstation game? I didn’t either!

    I wanted to share the art of Sasha Yazov, but found enough similar artists that I got carried away and it became it’s own post for you to check out.

    Heikki Lotvonen

    Heikki’s Garden of Flowers made the online rounds in June – it is an exceptional database of typographical art (the moveable-type precursor to ASCII art).

    Screenshot of the collected work of just one artist, Albert Schiller

    This database is a staggering effort. I am not surprised that it took Heikki 8 years to collect the images he’d made available in that one place. I’ve done something similar, collecting all images related to the Victorian-era Printers International Specimen Exchange, and I’ll tell you that what Heikki’s Garden of Flowers is something really special.

    I was particularly impressed by this image from a printer in 1870s Spain that inspired Heikki:

    Keep in mind that the above image was composed of hundreds of pieces of lead, all arranged and held together in place under tension with other metal/wooden pieces. Aesthetically outstanding relative to what contemporary (and future!) printers would be doing.

    DEFINITELY check out his “colly” thesis as well:

    Speaking of typography, check out these specimen books of the French “Turlot” Foundry. Examples:

    Chinese Republic-Era Calendar Posters

    Let’s say that somebody got an all-in-Chinese book about Chinese advertising calendar art from the ~1930s and it’s been on their mind. Here’s a similar book with lots of photos (press the “PDF” button to download).

    These posters usually featured attractive ladies, heartwarming domestic scenes, or folktales. Some were really well done:

    Trust me, this one exceptional. It has so much dynamism compared to wooden calendar illustrations from that time.

    Some of them are delightfully unusual – like ladies playing golf, or this woman out hunting with her dog (remember, this is 1920s-1930s China, not the British countryside!)

    Some of the illustrations were hilariously bad:

    Oh no, some of these cigarette brands…

    I want to say that calendar advertising is some odd phenomenon from 100 years ago, but then… each year, my family eagerly awaits a pictorial calendar that our local dentists’ office sends out to the neighbourhood. It’s the only bit of advertising they do, and it stands out. Calendar advertising still has a place in modern day marketing!

    Cleaners from Venus

    Aside from Altin Gun, I’ve been obsessed with the Cleaners From Venus. It is a (mostly) one-man band from the 1980s. Martin Newell seems to be a bit of a cult home-recording and casette publishing hit.

    Here are a couple of their tracks:

    I personally really like “Only a Shadow“, “Mercury Girl” and “Night Starvation“. But there are sooooo many good tracks.

    Someone may have bought his autobiography and paid more for shipping than the price of the actual book.

    Something about Cleaners from Venus reminds me of the modern musicians Bickle and Oliver Malcolm:

    Bickle – Can’t Make Friends

    Oliver Malcolm – The Machine

    Fictional Videogames

    Check out these fictional videogame stills made by Suzanne Treister:

    We’ve truly lost the ability to make beautiful computer art like that. All that I – a modern man wunderkind – could manage was Mr. Worm below. (made with HEAVYPAINT):

    Baby Limbs

    Could I interest you in marble carvings of the limbs of the royal children?
    The Victorians were truly demented.

    “I Dreamt of Kittens”

    We’ll wrap up with a spread from a Zine that was made by students of Heikki Lotvonen using unusual graphic design tools from his list:

    Source

  • Make Your Own Paris

    I got in this argument with my mother in February:

    We live in Toronto. Toronto is a city that does one particular thing very well. It is great at delivering a liminal feeling.

    There are vast open spaces in the Northern part. Sometimes, you’ll be waiting for the bus on a cold spring day (no bus shelter! Wind Central!). There will be some geese nearby, nipping at the anaemic grass. And you’ll look up into the big clear sky. And you’ll look down – no people on the street as far as the eye can see. Wow. Wide open.

    Sure, there are people in the handful of cars on the road, or inside those middle-of-nowhere office buildings that are becoming economically unviable.

    But you’re all alone. And you get that feeling of “nothing is going on here”.

    Sometimes I get that feeling when I’m in Toronto’s wonderful ravine system. The city is criscrossed with streams that flow in semi-wild ravines. This setup does double duty as natural sanctuary and flood control system.

    You’d listen to the burbling stream. Smell the flowering horse chestnut. Dodge the stinging nettle growing on both sides of the trail. And think, this is nature. I am nature.

    And no people anywhere around.

    One time, I asked the City, “can you maybe give me other feelings than this liminal vastness?”. Other cities can give excitement, or curiosity, or a feeling of connection with the past. Rome gives beauty – with ornate fountains on every corner, clear cool stream of drinkable water. Montreal gives edginess – groups of young guys, sometimes fighting each other shirts inverted from over the head look at that one go down. London gives hustle – everyone running as rapidly as they can, trying to afford their 10 pound burgers, every little empty nook getting filled through 2000 years of settlement, even in the little dead zones under the bridge someone is running a car mechanic shop.

    Toronto just gives liminal.

    It’s there on a Saturday in the underground PATH system that links all our downtown skyscrapers. All stores are closed. Just a few human beings clacking their shoes on beautiful echoing granite. 50% of those you’ll meet are security guards. Vast and totally abandoned. You could roll some kids through there on their scooters have a blast (I’ve done it, I know!)

    Is it possible to have a city that is all “transit area” with no destinations?

    Just endless inbetween, endless road. Flanked by purely logistical amenities for your neverending journey: a Wendy’s to take care of your hunger; Shoppers Drug Mart to get bandaids for your blistered feet; 7-11 to slake your thirst; H&M to buy the next pair of jeans to replace the last disposable pair that disintegrated right on the crotch1.

    When I had the argument with my mother she had just moved into the heart of downtown. Oh, how jealous I was! You see, I live in a Midtown neighbourhood that is frozen in the 1950s. Nothing ever happens. All businesses are closed on Mondays. And some, additionally, on Tuesdays.

    I told her that she’ll probably have a great time in her new neighbourhood. Imagine, sitting outside at a cafe; people watching!

    “Toronto isn’t Paris” was her sour response.

    I get it. For years, she’d complained that we don’t have decent opera, quality orchestra performances or museums. That, not only are our cultural activities mediocre, they’re also overpriced. “All people do here is eat at restaurants and go shopping”.

    Well, she’s not wrong. It’s hard to find anything that makes Toronto remarkable2. But with an attitude like “It’s not Paris”, you may as well dig a neat little hole in the ground and get all dressed up and buy yourself a nice bouquet of flowers and gently lay down in that hole.

    Sometimes you have to invent your own fun. Pretend. Lie to yourself.

    Sometimes you have to make your own Paris. Right there in the hallway. In that transit area between life’s loading dock and some temporary storage area from which you can pass into the backstage (before you get on a long escalator to nowhere).

    Yes, there are hardly any people in Toronto. Hardly anything to do.

    My wife and I are always puzzled when we see a family of German tourists, or a visiting British couple.Why have you come? . “What could there possibly be here for that you haven’t already seen?”, we want to ask.

    And yet.

    I’d like to think that 2,200 years ago, some weary Gaullish traveller stopped on a mid-river island for a break. “This is neat” he thought to himself. Over there, between the trees, he could imagine a large cathedral. And there, a… a… big king’s palace that will be turned into a museum. And right there on the left, lots of people sitting at little tables, eating some sort of flaky baked good with cups of hot bitter liquid. Oh how wonderful. Magnifique.

    And, right there, midway between someplace that mattered and anotherplace important. Right there in the ass-end of nowhere, he decided to make Paris.


    1. As I learned from the book “Ametora“, American lost its capacity to make the kind of denim fabric they had in the 1950s. All the jeans we wear are made of short-length inferior fibres, and that’s why our jeans disintegrate from sitting in an office chair, while great-grandpappy-Filipp’s jeans could survive the grueling work of a gold prospector out West. Japan is currently the place where they have the proper fabric and looms to make sturdy jeans. (Although, just because you see “Japan” on a store, it doesn’t mean that their jeans are hardy – I’m looking at you, Uniqlo) ↩︎
    2. Except, unfortunately, the food is perhaps remarkable. Where else can you tear into sauce-soaked Ethiopian injera, have a deathly-spicy Tibetan tripe dish and drink Vietnamese coffee so friggin dark that I had to ask “where is the condesed milk” and they said “oh, it’s in there” and it just tasted like the deepest darkest chocolate. ↩︎
  • I Spent 47 Days Making a Game That Lasted for 30 Minutes

    Once a month my coworkers and I play a game together. This is the story of a game that I worked on for 47 days, a game meant to be played for only 30 minutes at one of those sessions.


    My turn to host our team’s online “Social” was on May 28, 2026. Far in advance, I already knew what I wanted them to play. This game was just an idea in my head, but no matter: I figured that I could manually “run the game” by hand using ChatGPT.

    My personal philosophy is to first do a thing 100% manually, then semi-automate it, then fully script it. Usually the “manual version” is good enough. So it was settled: I’ll make my game idea come to life as the jankiest manual version of itself.

    The game I had in mind

    The Dark Lord, and Anubis-looking dude

    We are all in a Hell Dimension.

    Monsters from all over the galaxy have gathered to battle each other on a desolate planet, under the eyes of a Dark Lord.

    Each player picks a noun and their monsters’ image is AI-generated from it. Players are encouraged to choose a silly noun – so you may get a “bubblegum monster” or an “old shoe monster”.

    The monsters do battle, with each player typing in attacks as fast as they can for 25 seconds. Finally the Dark Lord (really a ChatGPT adjudicator) looks at the monster’s images and attacks to decide the winner.

    Here’s the twist: the winner absorbs the loser.

    After the battle, a new monster is created. The new monster is made up of 75% of the Winner’s body and 25% of the Loser. The losing player continues to be part of the new creature. This duo will then fight in a 2-on-2 battle against another duo (with their own composite monster). The “winner’s” attacks are weighed at 75%, but the previous round’s “loser” can still contribute to victory at a 25% weighting. And so on for smaller fractions at future rounds.

    The game concludes with an everyone-against-everyone brawl that’ll synthesize the final winner.

    Proof of concept

    On November 28, 2025, I went ahead and checked if this idea was even feasible. I had ChatGPT do the following:

    1. Generate two monster images,
    2. Decide which one would win in a battle, and
    3. Combine them at a 75/25 ratio into a new monster

    The concept looked feasible:

    We were in business, baybeeeee!

    Are we truly in business, baybeeeee?

    I couldn’t think of a way to manually run this experience over a Zoom call. Like, I could collect nouns from roughly 12 teammates, generate initial monsters for them and then what? Make pew-pew noises while they watch me screenshare a ChatGPT session?

    I guess I’ll have to build a multiplayer game.

    On April 10, I started coding.

    Time for tradeoffs

    Dear Reader I’ve nevor made a multiplayer game in moy loife.

    I’ve only made 1 game before. While it catapulted me to the top of the “violent canal-boat games” category, I built it with the Godot game engine and I had no clue how to use Godot for multiplayer games.

    May 28 was fast approaching. The pressure was on, but my work schedule had recently changed in a way that juuust gave me a chance to finish on time.

    It was feasible because this game was going to be a home-cooked meal.

    The fact this game was meant for a specific group of people meant that I could skip certain challenges:

    • Scaling – only between 10 and 16 people would be playing.
    • Logins – no need for logins or passwords.
    • Anti-cheat – this wasn’t some competitive Counter Strike game. Nobody was cheating (and if they were, it would be fugging awesome!)
    • Sleek design – this game could be real rough, because it’s charm was going to be in the fact that I hand-created it specifically for my coworkers.
    • Asset hosting – our Team Social will last only 30 minutes, so I didn’t have to worry about storing the monster images. I could just hotlink to the images that my chosen AI platform generates – these image URLs each had an ample 1-hour lifetime.

    Funny enough, the unpolished look of the game made it feel like a “quick and simple” creation to me (and I know it was neither!). My programmer sister, immediately picked up on the tonne of work that went into this game, though.

    I chose not to vibe-code this thing. Partly because I don’t have experience with coding harnesses. Partly because I wanted to put my own energy into this game so it felt like a gift to others. Finally, I wanted to learn some new technologies and you can’t learn if an LLM is doing all the work for you!

    No regrets here. Although there was a tetchy night with just 4 hours of sleep right before the deadline.

    Me learn little

    I’m a strong believer that you should “only have one crisis at a time”.

    You could rephrase this as “learn one new thing at a time, while keeping everything else familiar”.

    For this project, that meant running the game on my existing – NEARLY UNLIMITED – $90/year shared hosting (affiliate link because I’ve been with them since 2008 and this is what love feels like).

    This dictated that I use a “polling” architecture where each player’s computer repeatedly hits the server for updates, instead of a more appropriate WebSockets/Sockets.io approach where the server proactively sends updates to the players only when an update is available.

    I also leaned heavily on Python, and SQLite which is my “comfort zone database”.

    The 3 new things I decided to learn were:

    1. Building multiplayer capabilities into an app
    2. HTMX: an easy way to do polling, and to make use of data from the game server
    3. Using AI APIs throgh an Inference Platform (I chose Replicate.com)

    Hot take: Git is awful version-control software.
    If it takes everyone a lifetime to understand the mental model of a tool, then it’s been designed very badly. I don’t care how pretty the internals are or that 100 tiny Linuses created it in 1 night while dancing on the head of a pin.

    I ended up using “Fossil” version control for the first time. But as an amateur from the “just use CTRL Z as version control” school of programming, I still don’t understand the benefits of it. Finally, I had to learn Mermaid as that was the easiest way to visualize the tournament brackets.

    Things that happened along the way

    Here are some interesting parts of the 47 day journey:

    Everything’s a Chinese Dragon

    Initially, I was using “prunaai/z-image-turbo” to quickly generate monster images. But it was really difficult to get the look I wanted. Here’s an example of tweaking the prompt to generate a “crystal goblet monster”:

    All the monsters had a particular look. Eventually I thought maybe this image generation model was trained in a way that biases it. Turns out that the Z-Image foundation model was created by Alibaba’s AI division. They must’ve used a lot of images from China during model training, as well as lots of e-commerce imagery. That must be the reason why all the monsters look like Chinese Dragons and/or product hero-shots!

    I ended up switching to Flux.2 Pro. That one was created by Black Forest Labs, a German company. Their images more closely matched my concept of a monster. It’s interesting to note that this means my aesthetic preferences have a Western cultural bias.

    With all generative image models, I found that some concepts are so strong that they completely override my prompting. As an example, an “owl inspired monster” would strongly snap to being… just an owl:

    Attempts to create an owl monster mostly ended up as just an owl. Similarly, some models spotted the word “predatory creature” or “alien being” and would generate monsters that looked identical to the Predator and Alien movie monsters.

    I had to put lots of work into the monster-generating prompt. It had to be generic enough to work with any noun, but also consistent enough to give a certain look. This won’t be surprising to anyone who frequently creates AI images, but it was eye-opening to me (or maybe eye re-opening, as I’d previously used Midjourney and all the prompt tweaking was exhausting).

    Click to expand the final monster-generation prompt I went with.

    Here is the typical look of the monsters this prompt generated:

    Notice that they’re all bipedal lizardy dudes, framed by the background on boths ides, have the right number of limbs and 5 fingers on their hands. It’s a very standard look and I would use more extreme random elements in the prompt next time (“3 hands”, “a horn coming out of the chest”, “spraying acid”). The look came out a bit vicious. It would’ve been better for a game with coworkers if it was more goofy and lighthearted

    Adjudication took longer than expected

    I thought that, after a battle, deciding on a winner would be quick and my players could read through the decision right away (with the slow work of generating a composite monster image happening in the meantime).

    Things worked out the opposite way.

    The Dark Lord takes his sweet time to declare a winner

    In case of timeout or error, I made the Dark Lord choose a winner at random and say “X wins, because I like the cut of their jib and don’t owe anyone an explanation”. A simple solution for rare errors in a 1-time game!

    For some reason, OpenAI’s GPT-5-nano and GPT-5-mini would take 15 – 30 seconds to analyze the monsters’ images and attacks while generating a decision in the Dark Lord’s style. This slowed down gameplay significantly.

    In contrast, combining multiple monster images into one only took 13 – 17 seconds. I believe that it’s the analysis of 2 or 3 monster images that slowed down the adjudication. In the end, I chose to use Google’s Gemini-2.5-Flash model for generating the final decisions – it took only 5 – 7 seconds.

    Adding some spice

    I’ve already listed the things I could remove because this was a game for one group and one time – scalability, authentication, etc.

    Towards the very end, I realized that I could add certain in-jokes for the specific individuals playing the game. Each monster had a semi-random name and I made the name sometimes end similarly to a team member’s name. So it would sound eerily familiar but not quite.

    Monster name suffixed that would appear 1 out of 25 times

    In retrospect, I should’ve made these suffixes a lot more probable. After all, we’re playing this game only once together!

    Did my tech choices work out?

    With 20/20 hindsight, if I were to build this game again I would’ve upgraded my hosting to a VPS so I could have long-running apps and use Socket.io.

    Socket would let the server inform the players when there is a game event / new command to run. I had to build a polling system instead, and that was unnecessarily time consuming. I believe Socket.io would’ve also helped with synchronizing the “current time” between the server and players, to avoid key events like Battle End happening at different times for different people.

    I liked HTMX!
    I never understood the hassle of having the server send JSON objects that then influence the HTML structure of the page. HTMX cuts all that out by having the server respond to REST requests with a finished HTML fragment, that the client then jams into the existing page.

    In case you’re curious, the last programming language I actually liked was Perl 5.

    I still hate Python but I’ve gotten more comfortable with it because of this project. So, maybe I hate it a little less now?

    The final battle: everyone against everyone

    Replicate.com was a good tool for testing and switching AI models quickly. Kudos to my sister for educating me about OpenRouter and similar middleware. Replicate made it a breeze to call a variety of AI APIs, a big benefit to the project.

    What I didn’t like about Replicate how difficult it was to find a suitable AI model for a given task. Their UI is unusable for this (they provide marketing-speak instead of a comparison of features/speed). I had to use artificialanalysis.ai to choose models for the project. I also didn’t like that Replicate throttles their API usage unless you set up auto-deposits to top up spend. This wasn’t called out upfront and their documentation showed conflicting figures for the amount of preloaded cash that lifts the throttle. Finally, I thought that I’d be able to use one simple API for all models on Replicate, but each one required slightly different parameters and setup. None of these were deal-breakers.

    Was the outcome good?

    Yes!

    The whole team and I played the game and we had fun.

    I’m very satisfied with what I built! Visually, the game came out looking very Boris Vallejo (NSFW) / “pulpy” because of the font and the classic hero-stance of the monsters.

    The tournament ended and the final monster is born. The player with the “Fluffy” monster is the winner – because their original monster constitutes the biggest portion of this final creature.

    The beauty of throwing your life away

    Isn’t it funny to spend so much time on creating a 30-minute experience?

    On projects like these I am usually torn between two feelings:

    As a creative man I often feel like life is slipping away from me. With 2 kids occupying evenings and weekends and a full-time job, I would have to make brutal decisions about how I use my free time. This was especially relevant prior to April, when I’d had only ~2 hours free for projects after the kids went to bed (in practice, this often meant a lack of sleep for me).

    But also, I find that these projects – where the effort is comically disproportionate to the output – are the most satisfying to undertake (and read about! obligatory Mehran’s Steakhouse mention). I get to learn something new and, ironically, the noncommercial nature of the project gives me the stamina to carry it out to completion.

    Ultimately silly projects like “Monster Mash” are what abundance looks like. They are undertaken out of curiosity and generosity.

    Besides… this “1.5 months for 30 minutes” project is a marked improvement over my last game: that one took 3 months for 3 minutes of gameplay!

    “OK Jacob, I really wanna play it now”

    If you’ve fallen in love with the Hell Dimension Extended Universe, and you’re a loyal reader of the blog (disloyal readers will be chased out!) then reach out to me and I might set up some games for you & your friends/colleagues. No promises.

    As always, I’m <my first name> at <this website>.

    Adjudication for one of the initial 1-on-1 battles.
  • Links for June

    Hello Dear Readers!
    Here’s a fresh serving of links to tickle you rcuriosity in June:

    Spike Japan, is an old blog that looks at the decaying and depopulated parts of Japan. Check out this travelogue of Kinugawa Onsen – NSFW part at end:

    GANBROOD is an artist who makes satisfyingly-ambiguous images with AI.

    Nat Sarkissian’s flowers are a generative artwork that can “sway in the wind”

    I hate the idea of NFTs, but I love this hot gushy AI Slop by artist ClownVamp 💗💗💗💗 (here’s a writeup on this art installation)


    So, I was reading about the battle of Dien Bien Phu, where the Vietnamese broke the French’s colonial dominance over “Indochina”. And this little detail jumped out:

    The French forces came to Điện Biên Phủ accompanied by two bordels mobiles de campagne, (mobile field brothels), served by Algerian and Vietnamese women. When the siege ended, the Viet Minh sent the surviving Vietnamese women for “re-education”.

    But of course the French army travels with combat brothels! And they brought two to this battle!

    Dien Bien Phu was a whopper of a battle:

    • The French artillery commander Piroth committed suicide in his dugout by hugging a grenade.
    • Colonel de Castries effectively checked out and hid in his bunker during the battle. Allegedly leading to a “paratrooper putsch” where another commander took over.
    • About 50,000 Vietnamese combat personnel fought against 14,000 French.
    • The battle lasted 55 days – from 13 March – 7 May 1954 (55 days)

    Finally, the Viet Minh detonated a 1-tonne explosive mine under the French position on hill A1 and made it disappear:

    source

    Reading about the field brothels is a hoot. I especially appreciate that the last one was shut down because of a complaint from a Brazilian pimp about “unfair competition” from the French government. Truly, the wholesome little guy fighting for what’s right.


    What’s another year?: The now largely overlooked story of the American civilians that stayed behind in Saigon after April 30, 1975, some due to haplessness, others for heroics, or because they did not want to leave.

    Robin Sloan’s An app can be a home-cooked meal and Maggie Appleton’s Home-Cooked Software and Barefoot Developers. I spent a lot of April and May building a “home cooked game” to play with a specific group of people on a specific date. These two articles were on my mind.

    From Robin Sloan’s post:

    The exhortation “learn to code” has its foundations in market value. “Learn to code” is suggested as a way up, a way out. “Learn to code” offers economic leverage, professional transformation. “Learn to code” goes on your resume.

    But let’s substitute a different phrase: “learn to cook”. People don’t only learn to cook so they can become chefs. Some do! But many more people learn to cook so they can eat better, or more affordably. Because they want to carry on a tradition. Sometimes they learn because they’re bored! Or even because they enjoy spending time with the person who’s teaching them.

    Weird device: the Cuttelola Dotspen – the motorized pen that puts down dots for you!

    https://www.youtube.com/watch?v=8zZU05eafFM

    I was reading a library book. Whoever read it before, couldn’t help but correct this book’s grammar with a pencil:

    (the book was “The Secret Life of Groceries” by Benjamin Lorr)

    That’s it for now – if you liked one of these links, share it with your friends!

    Remember: Facebook, Instagram, Linkedin and Twitter intentionally hide links that you share on their platform. Because they hate the Web. Each link you share is a little bit of spit in their eye. A tiny likkle spittle for our beautiful friend Mark.

  • At 2026’s Art Undergrad Show (OCADU Gradex 111)

    Every year, I try to visit my local “Arts College” – OCADU – to see what creative young people are up to.

    This post is the first time I’m highlighting the people who’s work made an impact on me, to give them some publicity. Go ahead and visit their sites:

    I really liked Selina Zheng‘s “Shanzhai Is Culture” graphic design capstone project. She made a neat zine that explained how bootlegs and fakes are not considered “bad” in Eastern cultures, and she showed appreciation for the fun and creativity of knockoffs. Selina was inspired by Pacific Mall, which happens to be one of my favourite places in the Greater Toronto Area!

    Also in Graphic Design, Warrick Bruan (a friend of the blog commented that he has a fantastic name) his photography of decaying signage and the patina of age that certain materials gather when they’re used on building facades. He developed the photos in OCADU’s darkroom, and created 3 small books themed on metal, masonry and wood. He also created a 3D-printed building that is made up of liminal spaces (and continues in an infinite loop if you look at it just right).

    Warrick walked me through his work in person, and also informed me about the Liminal Assembly group here in Toronto. Warrick’s website is here. Unfortunately the PDF links on his Graphic Patina OCADU page don’t work…

    Warrick’s 3 books exhibited on stands

    There were several strong photographers at GradEx 2026, with 2 or 3 strong “absurd” photographers’ work exhibited together in a small room to great effect. Interiors by Reilly Narod. Blue 52 by Ethan Yoshitomo. And a third series of photographs of used up soap/items.

    Maya Juric had a series of large prints called “When I’m in Cosplay”. The prints themselves were intentionally faded/processed and featured her friends in Cosplay. What I liked about these photographs is that they reflected her love for her friends and showed everyone in their best light – similar to the qualities in a John Singer Sargent portrait. (A certain friend of the blog pointed out that, while I thought of Sargent showing women “as they are”, I was mistaken. Their necks and limbs are unnaturally elongated. Touche.)

    Finally, Ilaria Serra had these great ethereal 80s photographs in her “Liminal Reflections” series. I even bought a couple of small prints!

    Her website is at ilariaserra.format.com

    In the Illustration program, Kaisy Tsoi was hands-down the standout star. Her series of soft illustrations commemorated pets who passed away – and their special quirks. I think what’s interesting about Kaisy is that she has her own style and has something to say (sort of like the embroidery in Tomoko Konoike’s project that delivers a brutal message in a cutesy package).

    The vast majority of the young illustrators at the show had strong technical skill – but they’re young and don’t have a strong message to deliver. Yet.

    Lin Sun’s unique creature illustrations stood out. There’s something original here – Lin knows how to elongate and twist a body while keeping the end result cohesive.

    Ren (https://imginn.com/shadow.elysium/) had several illustrations themed around death and warfare. This one contrasts the glamour of war with the fact that the warriors are disposable cogs in the machine. I like the layout.

    Edouard Vallerand (https://imginn.com/lazy_cr0w/) presented a collection of illustrations from a post-apocalyptic world. We definitely have a kindred vibe and I appreciated his entertaining takes on futuristic cults, like these “Harbingers of the Invisible Gifts”:

    This cult worships the power of nuclear waste and the mutations and afflictions they provide from the invisible radioactive gifts that are given by their entity, The Kind One. They congregate in old, worn down nuclear facilities where the people of the old time have set up large spike monuments to worship their deity.

    Here’s a beautiful risograph print from Edouard.

    Devin Yang‘s work stood out from the other illustrators’ in the large hall. It is vibrant and dynamic. His style is not my jam, but I gotta give kudos to the lively spark in his work. His website his here.

    I especially liked the dance animation that you can see on this page.

    Daniel Vrbos made a font by running an ink-dipped marble in a series of rubberband tracks that he constructed. The result was pleasing and “punk”. Daniel’s site is at danielvrbos-portfolio.format.com

    Daniel has several interesting ideas on his site – like graphic design work he’d created with unusual tools (ie. no Adobe tools!):

    Aaryan Pashine had several cool books laid out. Aaryan creates custom programs that generate bespoke book layouts. He also makes generative images. And an XKCD search engine that reveals all the traffic going back and forth between the client and server as you do the search…. Just wild stuff. Check out his site a-p.space.

    In the Painting department, I liked this “centauress” by Maya Kaplan. The rest of the collection is also wonderfully weird. Like melonking in real life.

    Jake Santos (https://imginn.com/jaeksantos/) had a series of 4 defocused airbrush paintings of European metalwork. The paintings are large, so they create a very odd feeling when you stand nearby – something almost recognizable but not quite. Like you’re stroking out.

    That’s it.
    I hope you enjoyed!