Sign in

Alex Grad

@grad.dev
140 followers 128 following 90 posts

Building macOS & iOS apps in public and sharing everything I learn.

PostsRepliesMedia
Alex Grad @grad.dev · 20/03/2025
Finally built my dream custom keyboard! Really happy with the result. The feel and sound are super satisfying! PCB: @wooting.io 60HE+ Module Case: Tofu60 Redux in Meteorite Gray Keycaps: GMK MTNU Graphite Switches: GEON Raw HE
040
Alex Grad @grad.dev · 21/02/2025
Ported dkaraush's rotating ASCII donut GLSL shader to Metal + SwiftUI 🙃 Repo: github.com/graddotdev/S...
0112
Alex Grad @grad.dev · 19/02/2025
These buttons are also inspired by the Braun TG 60 🙃
000
Alex Grad @grad.dev · 19/02/2025
Just open-sourced NeoShadow, a SwiftUI component for creating smooth shadows! Perfect for neumorphic interfaces. Check it out: github.com/graddotdev/S...
250
Alex Grad @grad.dev · 18/02/2025
Ported Figma's "Beautiful Shadows" plugin by Alex Widua to SwiftUI. Considering making this open source – would love to hear if there's interest from the SwiftUI community.
010
Alex Grad @grad.dev · 16/02/2025
Thank you!
010
Alex Grad @grad.dev · 16/02/2025
I've quit my job to build macOS and iOS apps full-time. Excited to build in public, share my learnings, and connect with others on this journey. Wish me luck! 🙃
360
Alex Grad @grad.dev · 14/02/2025
Worth mentioning how smoothly @zed.dev runs on ProMotion displays. Scrolling and resizing windows are just so satisfying.
000
Alex Grad @grad.dev · 14/02/2025
10 days since upgrading from 16" MBP (Intel, 2019) to 14" MBP (M4 Pro, 2024). Hard to express how awesome this machine is — lightweight, beautiful, powerful and truly portable. Perfect for working from the couch.
120
Alex Grad @grad.dev · 25/12/2024
The only minor complaint I have is how dark (nearly black) the bulbs appear when they're off in the shimmering animation. This is particularly noticeable on a white background. @simonbs.dev, any chance you can add an option for this?
120
Alex Grad @grad.dev · 25/12/2024
The festivitas.app by @simonbs.dev is awesome!
1122
Alex Grad @grad.dev · 25/12/2024
140
Alex Grad @grad.dev · 25/12/2024
I've completed day 25 of #AdventOfTypeScript. Merry Christmas!
290
Alex Grad @grad.dev · 24/12/2024
I've completed the main part of day 24 of #AdventOfTypeScript but decided not to finish it since it focuses more on reverse engineering rather than type system knowledge. I've attached that part of the solution for anyone who's interested.
270
Alex Grad @grad.dev · 23/12/2024
Day 23 of #AdventOfTypescript required me to look at HotScript's repo to solve the task. Really like this approach. Definitely learned something new today.
050
Alex Grad @grad.dev · 23/12/2024
Yesterday was busy, so I brute-forced Day 22 of #AdventOfTypeScript. It wasn't hard, just a lot of coding, and I don't want to do that today.
140
Alex Grad @grad.dev · 21/12/2024
I've completed day 21 of #AdventOfTypeScript. Last year's tasks were much harder. I miss those days 😔 adventofts.com/events/2024/21
260
Alex Grad @grad.dev · 20/12/2024
Your template string differs from mine. In my solution you can replace `string` with `"var" | "let" | "const"` and it will work fine.
020
Alex Grad @grad.dev · 20/12/2024
What do you mean? I just replaced `"let" | "const" | "var"` with `string`. There is no need to overcomplicate it.
100
Alex Grad @grad.dev · 20/12/2024
However, using an accumulator is more efficient.
030
Alex Grad @grad.dev · 20/12/2024
I've completed day 20 of #AdventOfTypeScript. Same task, same solution. Déjà vu. adventofts.com/events/2024/20
260
Alex Grad @grad.dev · 19/12/2024
I've completed day 19 of #AdventOfTypeScript. adventofts.com/events/2024/19
260
Alex Grad @grad.dev · 18/12/2024
Thank you. I used @figma.com to create it.
010
Alex Grad @grad.dev · 18/12/2024
Yeah, it's sort of a brute force solution.
010
Alex Grad @grad.dev · 18/12/2024
I've completed day 18 of #AdventOfTypeScript. Easy one if you know about `NoInfer`. adventofts.com/events/2024/18
260
Alex Grad @grad.dev · 17/12/2024
@trash.supplies, will solutions like this be penalized and excluded from the leaderboard?
120
Alex Grad @grad.dev · 17/12/2024
I also found a new way to bypass the test cases. 🙃
380
Alex Grad @grad.dev · 17/12/2024
I've completed day 17 of #AdventOfTypeScript. It took me some time to realize that `x[0]` is not working with the `string` type. adventofts.com/events/2024/17
2120
Alex Grad @grad.dev · 16/12/2024
Here's the fixed solution, as the previous one was not working correctly. Thanks to @andarist.bsky.social for pointing out the problem.
040
Alex Grad @grad.dev · 16/12/2024
They need to write better tests instead. Check yesterday's brute-force solution. It doesn't have any `any` 😂
000
Alex Grad @grad.dev · 16/12/2024
Oh, now I see what you mean. I just need to move one line up to fix it.
100
Alex Grad @grad.dev · 16/12/2024
Why is my solution incorrect? If the arguments are passed in the wrong order, then in my opinion, the function should throw an error. That's why the return type is never. My initial solution simply didn't allow passing arguments in the wrong order, but because of that it failed test case t4.
100
Alex Grad @grad.dev · 16/12/2024
My initial solution passed e0 but failed t4. My final solution passes all test cases.
100
Alex Grad @grad.dev · 16/12/2024
That's not what I meant. There's no backend validation, so any solution can be submitted. You can also submit a brute-force solution that only passes the provided tests but fails in other scenarios.
100
Alex Grad @grad.dev · 16/12/2024
Here's a "brute force" solution as a bonus:
240
Alex Grad @grad.dev · 16/12/2024
By the way, after yesterday's incident, I'm no longer concerned about the leaderboard. It's scoring invalid and brute-force solutions anyway.
230
Alex Grad @grad.dev · 16/12/2024
I've completed day 16 of #AdventOfTypeScript. I had type-safe and working solution, but it fails t4. This test case forced me to rewrite my solution and wasted a lot of my time. I don't think that test case belongs there. adventofts.com/events/2024/16
3130
Alex Grad @grad.dev · 15/12/2024
bun
020
Alex Grad @grad.dev · 15/12/2024
There is also a "brute force solution":
140
Alex Grad @grad.dev · 15/12/2024
I've submitted the solution for day 15 of #AdventOfTypeScript using the cmd + y shortcut. The problem is that submitting using this shortcut accepts any solution, even a blank one. I hope today's scores don't count for the leaderboard. #AdventOfTypeScript adventofts.com/events/2024/15
3140
Alex Grad @grad.dev · 15/12/2024
020
Alex Grad @grad.dev · 15/12/2024
OMG! Yes, it works, but my leaderboard position is already fucked...
210
Alex Grad @grad.dev · 15/12/2024
I don't have a different GitHub account.
110
Alex Grad @grad.dev · 15/12/2024
I tried another browser and Incognito mode. I tried to relogin. I tried a different device. Nothing helps.
100
Alex Grad @grad.dev · 15/12/2024
I can't, bro. The top 25 on the leaderboard is already filled, but I still can't submit my solution.
100
Alex Grad @grad.dev · 15/12/2024
I just can't submit the solution today, so my leaderboard position is fucked. There are a lot of errors in the console. What a nice way to start the day. 😡 #AdventOfTypeScript adventofts.com/events/2024/15
350
Alex Grad @grad.dev · 14/12/2024
Yes, it's right here in the TypeScript Handbook: www.typescriptlang.org/docs/handboo...
typescriptlang.org
Documentation - Generics
Types which take parameters
110
Alex Grad @grad.dev · 14/12/2024
I've completed day 14 of #AdventOfTypeScript. Today's task was simple, but I felt too groggy to complete it quickly. 😔 adventofts.com/events/2024/14
1140
Alex Grad @grad.dev · 13/12/2024
Yeah, I meant if you know, you know; if you don't know, it will be hard for you. 😄
130
Alex Grad @grad.dev · 13/12/2024
Alternatively, here's another way to solve it:
170