Sign in

Gustavo Karkow

@gusk.ca
259 followers 215 following 408 posts

A man of few lines of code. gusk.ca

PostsRepliesMedia
Gustavo Karkow @gusk.ca · 07/01/2026
Brazilian pizza is an eating stravaganza
Three-quarters of a Brazilian pizza with three different flavors
000
Gustavo Karkow @gusk.ca · 17/12/2025
This paperback is beautiful! I'm looking forward to reading it over the holidays.
A left hand holding a copy of "Bootstrapping Computing" by Alexander D. Obenauer
1101
Gustavo Karkow @gusk.ca · 02/12/2025
Does Laravel have a "lottery" driver?
```php
<?php

return [
    'drivers' => [
        'spotify' => [
            'driver' => 'spotify',
        ],

        'lastfm' => [
            'driver' => 'lastfm',
        ],

        'musicbrainz' => [
            'driver' => 'musicbrainz',
        ],

        'local' => [
            'driver' => 'local',
        ],

        'lottery' => [
            'driver' => 'lottery',
            'drivers' => [
                'spotify',
                'lastfm',
                'musicbrainz',
            ],
        ],

        'failover' => [
            'driver' => 'failover',
            'drivers' => [
                'spotify',
                // 'lastfm',
                // 'musicbrainz',
            ],
        ],
    ],
];
```
010
Gustavo Karkow @gusk.ca · 11/11/2025
I'm not sure if I'll do anything with it, but I had this idea for a portfolio/personal website 🤔
A pegboard-style portfolio showcasing side projects, wall art, and favorite things.
200
Gustavo Karkow @gusk.ca · 01/10/2025
New books 📚
Deploy Empathy by Michele Hansen
The Secret of Secrets by Dan Brown
Murder on the Orient Express by Agatha Christie
030
Gustavo Karkow @gusk.ca · 24/09/2025
Ran my first half-marathon this weekend. I clearly needed more training, but I made it to the finish line! My goal for next year is to shave at least 30 minutes off my official time.
Runners getting ready at the starting line of the 2025 Marathon de MontréalA person is holding up a cheerful sign that reads: "Pain is just the French word for bread"Stats for the 21K race indicate a finishing time of 2h44 and a pace of 7:41/kmGustavo is running the half-marathon, wearing a cap, sunglasses, a light running jacket, and running pants. His bib shows the number 21302. The day is sunny but cool. Other runners appear in the background, while shade from trees covers portions of the road.
050
Gustavo Karkow @gusk.ca · 11/08/2025
Now part of the Pegboard of Memories and Dreams
The Pegboard of Memories and Dreams. It contains family pictures, postcards, and a 10K race medal, among other things. In the center of the image, a framed poster of an elephant, signed by the Laravel team at Laracon US 2025, is visible.
030
Gustavo Karkow @gusk.ca · 10/08/2025
It looks great, similar vibes to this one I have
A corduroy hat with a fishing illustration and the words "Bait & Tackle"
100
Gustavo Karkow @gusk.ca · 09/08/2025
I love your wall art. I think you would like my desk mat!
Bridge of Khazad-dûm Desk Mat
120
Gustavo Karkow @gusk.ca · 31/07/2025
If you could frame your first Laracon, I think it would look something like this
An elephant poster signed by the Laravel team, Aaron Francis, Adam Wathan, Evan You and Jeffrey Way at Laracon US 2025 in Denver
240
Gustavo Karkow @gusk.ca · 28/07/2025
It's been a while I don't travel solo. Strange feeling. I'm missing the family already.
A picture from an airport window. We can see a plane to the right. A truck is approaching it from the left.
050
Gustavo Karkow @gusk.ca · 28/07/2025
Run 10K before catching a flight to Denver? Sure, why not!
Orange running shoes being tied before a run
110
Gustavo Karkow @gusk.ca · 27/07/2025
What are we doing with our planet? 😢
Bad air quality in Montréal, with fine particles being the main polluant due to wildfires. Air quality index is 140.
010
Gustavo Karkow @gusk.ca · 25/07/2025
Well, I guess you can't wait til after Laracon now! 👀
"Laracon" and 🤘 depicted as pixel art in kilopx.com
110
Gustavo Karkow @gusk.ca · 23/07/2025
1 g = $1, right? 👀
010
Gustavo Karkow @gusk.ca · 23/07/2025
Due to popular demand, I've added a special Laracon US edition to the mix 🏌️
A custom postcard featuring "AST*rix & ob_lix in Laracon US"
000
Gustavo Karkow @gusk.ca · 21/07/2025
gksh.comics presents "AST*rix & ob_lix in Laracon US"
AST*rix & ob_lix in Laracon US
A parody of the Astérix comic using programming

Frame 1
whoami: ob_lix

The caption reads "A week before Laracon"

We can see two posts. The first is from $ashleyhindlebrit saying he's joining Laravel to work on all things AI. The second is from $taylorotwellix announcing AI as a big part of the Laravel team keynote at Laracon US.

ob_lix says "That's it. My days are numbered. AI is coming for my job!"

Frame 2
whoami: AST*rix & ob_lix

We can see a post from $ianlandsmanix saying "AI is going to take over the world and make humans subservient to their iron fist. Also AI:" It has a picture of someone else's post about a critical error committed by a supervised robotaxi driving on the wrong side of the road and whatnot.

AST*rix replies "You're a drama queen. AI can barely get things right half of the time."
ob_lix adds "I can't get things right half of the time!"

Frame 3
whoami: ob_lix

We can see the hero image for the laracon.us website.

AST*rix says "Don't beat yourself up. You'll have plenty of fun at this Laracon!"
ob_lix replies "You're right. My body is ready to win that golf tournament!"

Frame 4
whoami: AST*rix

We can see the lineup for the teams competing in the Laracon Golf Tournament.

- 🏆 **Facade**
  - $ericbarnestix — “MVP”
  - $ianlandsmanix — “Beat Eric once”
  - $jessarcherix — “Badass”
  - $taylorotwellix — “I only need a routes file”

- 🌀 **Cache Misses**
  - ob_lix — “Brought a hockey stick”
  - gksh.dev — “Tried bouncing a pebble on a lake once”
  - $nunomadurix — “Can we play futsal instead?”
  - $joedixonix — “Banned for flying a drone on the course”

AST*rix says "I guess you haven't seen the lineups yet 🤣"
210
Gustavo Karkow @gusk.ca · 18/07/2025
These turned out great 👌
A handful of custom postcards, featuring "AST*rix & ob_lix" comics, are being displayed on a desk
110
Gustavo Karkow @gusk.ca · 16/07/2025
I just ordered a limited run of custom postcards to give away at Laracon. Come find me to get one!
A custom postcard mock-up featuring one of my "AST*rix & ob_lix" comics
161
Gustavo Karkow @gusk.ca · 08/05/2025
Yae or nay?
Eloquent relation scoped by data from Context

```php
class RedirectIfMissingRegistration
{
    public function handle(Request $request, Closure $next): Response
    {
        /** @var Event $event */
        $event = $request->route('event');

        // Add event id to the context
        Context::addHidden('event_id', $event->id);

        if ($user->eventAttendee->registered) {
            return $next($request);
        }

        return redirect()->route('event.registration', [$event]);
    }
}

class User
{
    public function eventAttendees(): HasMany
    {
        return $this->hasMany(EventAttendee::class);
    }

    public function eventAttendee(): HasOne
    {
        return $this->eventAttendees()
            ->one()
            ->ofMany(['id' => 'max'], function ($query) {
                // Yae or nay?
                $query->where('event_id', Context::getHidden('event_id'));
            });
    }
}
```
200
Gustavo Karkow @gusk.ca · 23/04/2025
Thanks @mattstauffer.com, for the book and the kind words!
Laravel Up & Running, a book by Matt Stauffer"Gustavo! May this book, and your career using Laravel, bring you success and joy!"

Signed by the author
050
Gustavo Karkow @gusk.ca · 16/04/2025
Sick hoodie, @wesbos.com!
A photo of me wearing a syntax.fm black hoodie
150
Gustavo Karkow @gusk.ca · 03/04/2025
I need to get my Zeppelin fixed in time for Laracon
A Zeppelin LZ 127 automatic wristwatch
020
Gustavo Karkow @gusk.ca · 01/04/2025
First 10K of the year, a bit less than a month from the race 💪
Stats from a 10km run showing an avg heart rate of 153bpm, avg pace of 6:40/km, and a total time of 1:07:18
000
Gustavo Karkow @gusk.ca · 29/03/2025
Frittata! 🍳
A pan of potato and cheese frittata
041
Gustavo Karkow @gusk.ca · 20/03/2025
Throwback
Picture taken from The High Line in NYC, 2023
000
Gustavo Karkow @gusk.ca · 18/03/2025
Why not run Fusion while we're at it Howdy, @aaronfrancis.com!
010
Gustavo Karkow @gusk.ca · 17/03/2025
Isn't this setting what you want to toggle off?
Zen browser's Theme Settings
110
Gustavo Karkow @gusk.ca · 15/03/2025
Swing into spring
010
Gustavo Karkow @gusk.ca · 11/03/2025
Ankles started giving up on me around 6K again. Any suggestions? @kvlly.com @devdevcharlie.com @dyrynda.au
Running stats showing a 8.07km run around Parc Lasalle, an avg heart rate of 154bpm, and an avg pace of 6:10/km
100
Gustavo Karkow @gusk.ca · 07/03/2025
What if @val.town could run PHP and Laravel? 👀
1113
Gustavo Karkow @gusk.ca · 06/03/2025
You mean Amazon SDS?
Developer guide for a fictitious AWS service called Amazon SDS (Simple Distillery Service)
030
Gustavo Karkow @gusk.ca · 28/02/2025
Great talk @dunglas.dev, merci!
FrankenPHP talk at Confoo 2025
001
Gustavo Karkow @gusk.ca · 28/02/2025
I see what you're doing @simonhamp.me 👀
"Building desktop apps... with PHP?" talk at Confoo 2025 in Montréal
210
Gustavo Karkow @gusk.ca · 25/02/2025
Not a bad run after a debilitating weekend with food poisoning. If I ever struggle, here's proof I can make it.
Screenshot of a 6.47km run showing the path around Parc Lasalle, an avg heart rate of 148bpm, and an avg pace of 6:49/km
100
Gustavo Karkow @gusk.ca · 08/02/2025
Plage des Salines. Out of focus, there's a hand holding a beer.
010
Gustavo Karkow @gusk.ca · 02/02/2025
gksh.comics presents "AST*rix & ob_lix in Laracon EU"
AST*rix & ob_lix in Laracon EU
A parody of the Astérix comic using programming

Frame 1
whoami: ob_lix

The caption reads "In the days leading to Laracon"

We can see the first slide for ob_lix Laracon EU talk. It's titled "Full-Snack Developer" and the subtitle reads "Lessons from building full-snack.shop, a native app by ob_lix."

ob_lix says "Laracon is tomorrow and full-snack.shop hasn't been approved in the app store yet"
ob_lix adds "My talk gonna be ruined!"
AST*rix replies "I didn't know you were speaking this year"

Frame 2
whoami: unknown

We can see a list of apps in review at the app store. The vast majority has been submitted by $simonhampix. ob_lix's app, "full-snack.shop.final-final13.apk", is the last one on the list and it doesn't look like it will be reviewed any time soon.

ob_lix says "It was supposed to be a surprise talk"
AST*rix replies "Well, you're in big trouble. I’ve heard there’s a shitload of apps in review!"
AST*rix adds "Why didn't you build a TUI instead?"

Frame 3
whoami: ob_lix

```bash
# in a parallel universe
ssh full-snack.shop
```

ob_lix says "TUIs are so 2024! Who even uses the terminal anyway?!"
AST*rix replies "Selling crispy banana chips through the terminal? You'd be a pioneer!"
ob_lix adds "I even commissioned a logo from $canecus. What am I to do now?"

Frame 4
whoami: unknown

We can see a post by $ianlandsmanix saying "I'm still spending a not insignificant portion of my net wealth on these. They're so good. I can't stop." with a picture showing a bag of crunchy banana chips.

AST*rix says "At the very least, bring some boxes (of banana chips) to give away at the conference"
ob_lix thinks "If only my supplier hadn't been delaying shipments…"
131
Gustavo Karkow @gusk.ca · 28/01/2025
Definitely one of those days where you ask yourself "What am I even doing this for?"
Screenshot of a 3.40km run showing the path around Parc Lasalle, an avg heart rate of 147bpm, and an avg pace of 6:49/km
110
Gustavo Karkow @gusk.ca · 22/01/2025
😂 It reminded me of the green I used for my office, that's all
An office with green walls
010
Gustavo Karkow @gusk.ca · 20/01/2025
"Look at the crazy guy running when it's -16°C outside"
Screenshot of a 3.34km run showing the path around Parc Lasalle, an avg heart rate of 146bpm, and an avg pace of 6:59/km
210
Gustavo Karkow @gusk.ca · 19/01/2025
gksh.comics presents "AST*rix & ob_lix & $benholmenix"
AST*rix & ob_lix & $benholmenix
A parody of the Astérix comic using programming

Frame 1
whoami: AST*rix

The caption reads "In a feature request"

We can see a feature request by $kilopix with the title "Add API Endpoint to Draw in The Village's Mural"
Its description says "Create a simple API endpoint that allows updating a 40x25 mural with binary pixel values: `0` for black and `1` for white."

AST*rix says "$kilopix wants an API for that big clunky mural we have in the village"
AST*rix adds "So artisans can draw things on it"
ob_lix says "Why's he asking us? That's $benholmenix's project"

Frame 2
whoami: $benholmenix

We can see a post by $benholmenix saying "Can the Roman mind comprehend this?" with a picture of his hand holding a cheese balls container 

AST*rix says "He's not, but $benholmenix went on a big cheese pilgrimage…"
ob_lix replies "The bastard! I also wanted some sweet cheese!"

Frame 3
whoami: ob_lix

The caption reads "A few days later…"

```yaml
openapi: 3.0.0
info:
  title: $kilopix Mural API
  version: 1.0.0
servers:
  - url: https://api.gksh.comics/facadix/mural/v1
paths:
  /mural:
    post:
      summary: Update the entire mural with a new set of pixels
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: integer
                enum: [0, 1] # 0 for black, 1 for white
            example:
              - 1, 0, 1, 0, ..., 1
              - 0, 1, 0, 1, ..., 0
```

ob_lix says "The API is ready, but what if $caesar comes and draws a big ding-dong on the mural?"
AST*rix replies "Hm… let's rewrite the git history and put $benholmenix as the author"

Frame 4
whoami: AST*rix

```bash
git commit --amend \
  --author="$benholmenix <benholmenix@facadix.com>"
```

AST*rix says "We can call it a day and go get some ale!"
ob_lix replies "Ha! I'm paying!"
310
Gustavo Karkow @gusk.ca · 17/01/2025
gksh.comics presents "AST*rix & ob_lix in #30in30"
AST*rix & ob_lix in #30in30
A parody of the Astérix comic using programming

Frame 1
whoami: ob_lix

The caption reads "In a 30in30 challenge"

```diff
<?php namespace Facadix\Http\Controllers;

+// 30in30 💪
class NotifyWhenCaesarAttacksController {
```

AST*rix says "Why have you been adding these comments to random files in the past week?"
ob_lix replies "I'm doing a 30 commits in 30 days challenge"

Frame 2
whoami: AST*rix

We can see the last few paragraphs of Zuzana's "Is coding creative?" article (https://www.zuzana-k.com/articles/is-coding-creative)

AST*rix says "That's supposed to be a creative endeavour!"
AST*rix adds "You cannot simply brute force everything, ob_lix"

Frame 3
whoami: ob_lix

AST*rix says "At the very least, you should change DPA[1] files to confuse $caesar"
ob_lix replies "Ha! That’s not a bad idea!"

[1] Design Patterns Army

```diff
<?php namespace DPA\Http\Controllers;

class RequestReinforcementsController {
  public function __invoke() {
-    RequestReinforcementsJob::dispatch(amount: 5000);

-    return "Reinforcements have been dispatched!";
+    return redirect()->away("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
  }
}
```

Frame 4
whoami: $caesar

$caesar has visited "https://gksh.comics/facadix/dpa/reinforcements" and we can see a frame of "Rick Astley - Never Gonna Give You Up" music video in a browser window

$caesar says "WTF?!"
210
Gustavo Karkow @gusk.ca · 15/01/2025
gksh.comics presents "AST*rix & ob_lix & $aarondfrancix" (𝑐𝑒𝑛𝑠𝑜𝑟𝑒𝑑 𝑣𝑒𝑟𝑠𝑖𝑜𝑛)
AST*rix & ob_lix & $aarondfrancix
A parody of the Astérix comic using programming

Frame 1
whoami: ob_lix

The caption reads "In a terminal window"

```bash
➜  facadix git:(main) ✗ composer run dev
> npx concurrently -c "#93c5fd,#c4b5fd,#fb7185,#fdba74" "php artisan serve" "php artisan queue:listen --tries=1" "php artisan pail --timeout=0" "npm run dev"

[logs]    INFO  Tailing application logs.                        Press Ctrl+C to exit  
[logs]                                                Use -v|-vv to show more details  
[queue] 
[queue]    INFO  Processing jobs from the [default] queue.  
[vite] 
[vite] > dev
[vite] > vite
[vite] 
[vite] sh: vite: command not found
[vite] npm run dev exited with code 127
[server] 
[server]    INFO  Server running on [http://127.0.0.1:8000].  
[server] 
[server]   Press Ctrl+C to stop the server
```

AST*rix says "What's this nonsense, ob_lix? Did $caesar make you install it?"

ob_lix replies "Hm... it's the new `composer run dev` command"

Frame 2
whoami: $aarondfrancix

$aarondfrancix says "Hold my two sets of twins!" while looking at the intro page for the CLI Experiments course from Joe Tuinnenbaum

Frame 3
whoami: $aarondfrancix

The caption reads "A few seltzers later..."

```bash
composer require aarondfrancix/solitaire --dev \
  && php artisan solitaire
```

Frame 4
whoami: $aarondfrancix

Magic happens

We see the "About" tab from aarondfrancix/solitaire package with a big "SOLITAIRE" as ascii art. The description says "Solitaire for Laravel is a package to run multiple commands at once." There are instructions on how to use it and a list with a few of the author's social links.

$caesar says "Yeah but why though?"
310
Gustavo Karkow @gusk.ca · 15/01/2025
gksh.comics presents "AST*rix & ob_lix & $aarondfrancix" 𝐴𝑛𝑦 𝑟𝑒𝑠𝑒𝑚𝑏𝑙𝑎𝑛𝑐𝑒 𝑡𝑜 𝑎𝑐𝑡𝑢𝑎𝑙 𝑒𝑣𝑒𝑛𝑡𝑠, 𝑝𝑒𝑟𝑠𝑜𝑛𝑠, 𝑜𝑟 𝑙𝑜𝑐𝑎𝑙𝑒𝑠 𝑖𝑠 𝑝𝑢𝑟𝑒𝑙𝑦 𝑐𝑜𝑖𝑛𝑐𝑖𝑑𝑒𝑛𝑡𝑎𝑙
AST*rix & ob_lix & $aarondfrancix
A parody of the Astérix comic using programming

Frame 1
whoami: ob_lix

The caption reads "In a terminal window"

```bash
➜  facadix git:(main) ✗ composer run dev
> npx concurrently -c "#93c5fd,#c4b5fd,#fb7185,#fdba74" "php artisan serve" "php artisan queue:listen --tries=1" "php artisan pail --timeout=0" "npm run dev"

[logs]    INFO  Tailing application logs.                        Press Ctrl+C to exit  
[logs]                                                Use -v|-vv to show more details  
[queue] 
[queue]    INFO  Processing jobs from the [default] queue.  
[vite] 
[vite] > dev
[vite] > vite
[vite] 
[vite] sh: vite: command not found
[vite] npm run dev exited with code 127
[server] 
[server]    INFO  Server running on [http://127.0.0.1:8000].  
[server] 
[server]   Press Ctrl+C to stop the server
```

AST*rix says "What's this nonsense, ob_lix? Did $caesar make you install it?"

ob_lix replies "Hm... it's the new `composer run dev` command"

Frame 2
whoami: $aarondfrancix

$aarondfrancix says "Hold my two sets of twins!" while looking at the intro page for the CLI Experiments course from Joe Tuinnenbaum

Frame 3
whoami: $aarondfrancix

The caption reads "A few seltzers later..."

```bash
composer require aarondfrancix/solitaire --dev \
  && php artisan solitaire
```

Frame 4
whoami: $aarondfrancix

Magic happens

We see the "About" tab from aarondfrancix/solitaire package with a big "SOLITAIRE" as ascii art. The description says "Solitaire for Laravel is a package to run multiple commands at once." There are instructions on how to use it and a list with a few of the author's social links.
100
Gustavo Karkow @gusk.ca · 15/01/2025
gksh.comics presents "AST*rix & ob_lix vs. $caesar"
AST*rix & ob_lix vs. $caesar
A parody of the Astérix comic using programming

Frame 1
whoami: $caesar
The caption reads "In a Laravel project"

```php
<?php namespace DPA\Commanders;

final class Imperator {
  public function __construct(
    public readonly string $name,
    public readonly int $armySize = 100_000,
  ) {}

  public function destroy(string $target) {
    echo "Design Patterns Army to destroy $target."
      . " Fully deploying {$this->armySize} soldiers!";
  }
}

<?php namespace Facadix\Providers;

class CaesarServiceProvider extends ServiceProvider {
  public function register() {
    $this->app->bind(Imperator::class, fn () => new Imperator(name: 'Julius Caesar'));
  }
}
```

Frame 2
whoami: ob_lix
On a speech bubble, ob_lix says "Look IDEfix, that'll show 'em!"

```bash
composer require stevebauman/unfinalize
```

Frame 3
whoami: AST*rix
```php
<?php namespace Facadix\Providers;

class ResistanceServiceProvider extends ServiceProvider {
  public function register() {
    $this->app->when(Facadix\Jobs\DestroyTarget::class)
      ->needs(DPA\Commanders\Imperator::class)
      ->give(fn () => new class extends DPA\Commanders\Imperator {
        public function destroy(string $target) {
          echo "AST*rix and ob_lix have saved «{$target}»."
            . " Take that, {$this->name}!"
        }
      });
  }
}
```

Frame 4
whoami: $caesar
```bash
php artisan facadix:destroy-target "The Village"
```

$caesar is furious saying "Damn you, Artisans!" because the command output was "AST*rix and ob_lix have saved «The Village». Take that, Julius Caesar!"
100
Gustavo Karkow @gusk.ca · 14/01/2025
Getting a refresher on what's new in PHP 8.4 at the PHP Montréal meetup
Benoit Borrel presenting "Tout sur les nouveautés de PHP 8.4" at the PHP Montréal meetup
030
Gustavo Karkow @gusk.ca · 12/01/2025
When you forget the sled at the grandparents', you have to make do with the second best thing. Patent pending 😆
A hand pulling a makeshift sled made from a baby bathtub. The ground is covered in snow.
000
Gustavo Karkow @gusk.ca · 02/01/2025
I came home from the holidays to find this little treat from Sir @benholmen.com. Thank you!
A pair of round stickers: "Work hard, create magic" and "Pairamid Schemer"
220
Gustavo Karkow @gusk.ca · 02/01/2025
This might be my best pizza yet. Homemade dough, tomato sauce, bell peppers, artichokes — cheese, prosciutto, and basil leaves were added later 🍕
Pizza dough with tomato sauce, artichokes and peppers as toppings
110
Gustavo Karkow @gusk.ca · 18/12/2024
Here's a riff on that same idea
Drawing of a brain inside of a lightbulb, one half representing the logical and analytical, and the other half the imaginative and wonder-filled aspects. On the left, we can see chess and puzzle pieces, binary code, Einstein's mass-energy equation, and a circuit. On the right, a vitrola, musical notes transforming into birds, flowers, the iconic prism from The Dark Side of the Moon, a UFO, the moon and a cosmonaut.
000