Details
-
AboutYou know who.
-
SkillsYou know what.
-
LocationSome nice park.
-
Website
-
Github
Joined devRant on 7/20/2025
Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API

From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
-
🚀 Vibe coding be like:
👉 First 30 mins: "I don’t fully get what’s happening here…" 🤔
👉 Next hour: magically works 💻✨
👉 Then: you try one tiny change → AI confused → you confused → now you are reverse engineering your own code 😅
But for real… AI is doing A LOT right now. The tricky part is knowing where to draw the line, discipline is the only guardrail. Sometimes you don’t even notice when you’ve crossed it.5 -
Did something happened to skyRant?
A weird toast notification appeared, and now nothing loads and the message no network appears (I do have network, in case you were wondering).9 -
I've talked about the privileges of being a dev, before. The following is not a rant btw, just me appreciating my line of work.
Back in 2018, when I was 2 YOE as a Laravel developer, this thought crossed my mind, what if I remained a Laravel dev all my career and never got a job in another tech stack?
I thought I could make some demo projects but no one would pay me for that. And on top of that, I'd have to start from scratch since that Laravel experience wouldnt count for, let's say C# dev job.
Is this the "comfort zone" most devs get trapped in? And what if I get trapped in it as well?
It was my legit concern back then.
But whatever happened after that, happened and here we are.
I am now a React + PostgreSQL dev, and because of my freelancing, I'm getting pushed into becoming a Vue JS + C# full stack dev, all the while I'm getting paid for it. My research times are also billable.
I just find myself in a privileged position where my career and skills will now never be stagnant, and as a result of that, I get to earn my bread and butter.
I just love being a dev sometimes :)2 -
Okay, summary of previous episodes:
1. Worked out a simple syntax to convert markdown into hashes/dictionaries, which is useful for say writing the data in a readable format and then generating a structured representation from it, like say JSON.
2. Added a preprocessor so I could declare and insert variables in the text, and soon enough realized that this was kinda useful for writing code, not just data. I went a little crazy on it and wound up assembling a simple app from this, just a bunch of stuff I wanted to share with friends, all packed into a single output html file so they could just run it from the browser with no setup.
3. I figured I might as well go all the way and turn this into a full-blown RPG for shits and giggles. First step was testing if I could do some simple sprites with SVG to see how far I could realistically get in the graphics department.
Now, the big problem with the last point is that using Inkscape to convert spritesheets into SVG was bit of a trouble, mostly because I am not very good at Inkscape. But I'm just doing very basic pixel art, so my thought process was maybe I can do this myself -- have a small tool handle the spritesheet to SVG conversion. And well... I did just that ;>
# pixel-to-svg:
- Input path-to-image, size.
- grep non-transparent pixels.
- Group pixels into 'islands' when they are horizontally or vertically adjacent.
- For each island, convert each pixel into *four* points because blocks:
· * (px*2+0, py*2+0), (px*2+1, py*2+0), (px*2+1, py*2+1), (px*2+0, py*2+1).
· * Each of the four generated coordinates gets saved to a hash unique to that island, where {coord: index}.
- Now walk that quad-ified output, and for each point, determine whether they are a corner. This is very wordy, but actually quite simple:
· * If a point immediately above (px, py-1) or below (px, py+1) this point doesn't exist in the coord hash, then you know it's either top or bottom side. You can determine whether they are right (px+1, py) or left (px-1, py) the same way.
· * A point is an outer corner if (top || bottom) && (left || right).
· * A point is an inner corner if ! ((top || bottom) && (left || right)) AND there is at least _one_ empty diagonal (TR, TL, BR, BL) adjacent to it, eg: (px+1, py+1) is not in the coord hash.
· * We take note of which direction (top, left, bottom, right) every outer or inner corner has, and every other point is discarded. Yes.
Finally, we connect the corners of each island to make a series of SVG paths:
- Get starting point, remember starting position. Keep the point in the coord hash, we want to check against it.
- Convert (px, py) back to non-quadriplied coords. Remember how I made four points from each pixel?
. * {px = px*0.5 + (px & 1)*0.5} will transform the coords from quadriple back to actual pixel space.
· * We do this for all coordinates we emit to the SVG path.
- We're on the first point of a shape, so emit "M${px} ${py}" or "m${dx} ${dy}", depending on whether absolute or relative positioning would take up less characters.
· * Delta (dx, dy) is just (last_position - point).
- We walk from the starting point towards the next:
· * Each corner has only two possible directions because corners.
· * We always begin with clockwise direction, and invert it if it would make us go backwards.
· * Iter in given direction until you find next corner.
· * Get new point, delete it from the coord hash, then get delta (last_position - new_point).
· * Emit "v${dy}" OR "h${dx}", depending on which direction we moved in.
· * Repeat until we arrive back at the start, at which point you just emit 'Z' to close the shape.
· * If there are still points in the coord hash, then just get the first one and keep going in the __inverse__ direction, else stop.
I'm simplifying here and there for the sake of """brevity""", but hopefully you get the picture: this fills out the `d` (for 'definition') of a <path/>. Been testing this a bit, likely I've missed certain edge cases but it seems to be working alright for the spritesheets I had, so me is happiee.
Elephant: this only works with bitmaps -- my entire idea was just adding cute little icons and calling it a day, but now... well, now I'm actually invested. I can _probably_ support full color, I'm just not sure what would be a somewhat efficient way to go about it... but it *is* possible.
Anyway, here's first output for retoori maybe uuuh mystery svg tag what could it be?? <svg viewBox="0 0 8 8" height="16" width="16"><path d="M0 2h1v-1h2v1h2v-1h2v1h1v3h-1v1h-1v1h-1v1h-2v-1h-1v-1h-1v-1h-1Z" fill="#B01030" stroke="#101010" stroke-width="0.2" paint-order="stroke"/></svg>4 -
How do I make money through humor?
I am getting better at amusing myself.
For instance. I get take and bake pizza from Papa Murphys. The pizza says to cook at 425 or 450. I always cook it at 420 at what I have determined to be "perfect" times. So a Papa Murphys pepperoni is to be cooked for 11 minutes at 420 F. Literal perfection with not too dark crust, and not too light. All my homies says it great.8 -
designer: use the <fooBar> color
There are 30+ fucking <fooBar> in the css, which one? I can't tell the shades apart.3 -
I was on WarpCli Live on youtube and they gave out a few discount coupons: 1DOLLARGPT5 and 5DOLLARGPT5
PS: I'm not affiliated with them, also don't couldn't find anything about this type of post on the rules, but since it can be beneficial to some ppl , I'll risk it7 -
There was a post recently to not think about that someone is evil if you can explain it with stupidity, well it was nicely phrased but you get the point, so, today I went to the toilet, someone tore down the paper from the wall that states to not throw trash into the pissoir and he threw in into it. I am 98% certain it wasn't stupidity but pure disrespect and disregard of the person who tries to fucking keep ot clean. I just can't stand people anymore.1
-
Hi! I'm celebrating my 1000th up-vote! Such fame. Oke, the points are earned by my younger sister, but I will do my best to be as trending as she was!
Love this peaceful community where almost everyone respects each other.
I really think that devRant has a future.12 -
rust is just... so unclean. sigh
what's the point of these stupid verbose features if they're incompatible with any sort of adaptability
like I wanna return a retry-after header value but if I do then I have to both rewrite the good result path and the bad result path... with a bunch of map_errs. this feels like java20 -
Been practising for the codility test, thinking maybe only the first couple training tests are shitty non-programming math/compsi problems written in code. Haven't even done the test yet, and I'm already tempted to message the recruiter back that I'm no longer interested, since if this is how they test their devs I doubt they're getting the best. I'll still do it since it's the weekend, but I guarantee I can get AI to generate the most "efficient" aka the exact and only solution they want.
The first orange flag was the fact that the HR lady didn't know much about recent tech...
https://devrant.com/rants/19112918/...6 -
I waited so long to brag about this fact: I finish whatever project I start. No matter how bored I get, I never abandon it midway or get sidetracked into some shiny new gig. I was gloating and jubilating this evening cos I can beat my hands against my chest after months and months at a stretch. Held a little party on my WhatsApp status haha7
-
I'm at a point in my career where I've started to think -
"Have I made it?"
I mean, I make a very good amount of money by freelancing, I have an online presence with my YouTube and I have a wife.
Isn't this all I ever wanted in life? If I push for more at this point, what am I pushing further for?
This question is equally relaxing and terrifying at the same time. It keeps me enlightened and in a state of limbo, at the same time.9 -
JoyRant build 43
You can now see who upvoted your comment.
This works by getting the info from the notifications list so it will not work for old upvotes which aren’t in the notif list anymore.
Forgot to also add this for rants. Will add later.
Complete list of changes:
* notifications from all tabs load at once
* info button about who upvoted my comment
* comments counter for own rants
* no reply button for own comments
* ignore users locally (added in build 42)7 -
Just finished the code tests. I swear all of them could have just been regex. The first 2 I know can be because I did.
The last one was pattern matching in an array of strings (think battleships)
I actually fucked up the second test because I decided that they probably want code instead of regex...8 -
I have such an unpopular opinion on some things that I'm afraid to tell it aloud, fearing of cancellation, hate and stuff. I don't think this is a democracy anymore if we have to self police our thoughts to match the acceptance of the weak.49
-
++age
Can’t believe it’s been a year already. Currently enjoying a month-long break from work, almost halfway through it. Realizing that I’m at an age where I need to recover from going to a museum, which is wild. But I’m taking the time to visit museums during my PTO instead of just sitting at home binge watching shows like normal.
Unrelated, I tried to crochet a Chucky doll and it turned out.. interesting.12 -
JoyRant build 40
* Added spam detection!
* Fixed weird black background in encountered users view
* Fixed aspect ratio of placeholder user image
Spam is detected using a spam score system.
Specific words and patterns increase the score and once a threshold is reached, the rant is considered spam.
In the feed spam rants will be less visible (max 3 lines of text, smaller and half transparent text and no images) but you can still open the rant (maybe to check the full rant to see if it is really spam) and downvote.
This can be disabled in Settings but is enabled by default.
It’s phase 1 of the spam related feature.
I will approach phase 2 later since it‘s low priority for me.
Feel free to contribute to the spam detection config file via PR:
https://github.com/WilhelmOks/...10