3723 stories
·
3 followers

React Libraries for 2025

1 Share

Join 50.000+ Developers

Learn Web Development

Learn JavaScript

Access Tutorials, eBooks and Courses

Personal Development as a Software Engineer

Subscribe  View our Privacy Policy.

Read the whole story
emrox
5 hours ago
reply
Hamburg, Germany
Share this story
Delete

Hide a message in an emoji

1 Share

Pretty interesting trickery here, encoding a secret message in an emoji that you automatically get when you copy/paste it from Paul Butler.

Most unicode characters do not have variations associated with them. Since unicode is an evolving standard and aims to be future-compatible, variation selectors are supposed to be preserved during transformations, even if their meaning is not known by the code handling them. So the codepoint U+0067 (“g”) followed by U+FE01 (VS-2) renders as a lowercase “g”, exactly the same as U+0067 alone. But if you copy and paste it, the variation selector will tag along with it.

So you slap on a bunch of “variations” to a character that doesn’t support them (the secret message) and then pluck them off if you happen to know they are there. Sneaky sneaky.

Read the whole story
emrox
1 day ago
reply
Hamburg, Germany
Share this story
Delete

Doom Response

1 Share

Doom Response

And more doom.

Read the whole story
emrox
2 days ago
reply
Hamburg, Germany
Share this story
Delete

How to professionally say

1 Share
  • You are overcomplicating this

    • Being mindful of timelines. Let’s concentrate on the initial scope.

  • That meeting sounds like a waste of my time

    • I’m unable to add value to this meeting but I would be happy to review the minutes.

  • I told you so

    • As per my prediction, this outcome does not come as a surprise.

  • That sounds like a horrible idea

    • Are we confident that this is the best solution or are we still exploring alternatives?

  • I already told you this

    • As Indicated prior

    • The information has not changed since the last time it was communicated.

  • Can you answer all of the questions I asked and not just pick and choose one

    • Are you able to provide some clarity around the other questions previously asked?

  • Did you even read my email?

    • Reattaching my email to provide further clarity

    • I’ll provide an update when I have one

  • Stop bothering me

    • You have not heard from me because further information is not available at this time, once I have an update I’ll be sure to loop you in.

  • I don’t want to talk to you right now!

    • I am currently tied up with something but I will connect with you once I am free.

  • Do your job!

    • It is my understanding that you are the appropriate person to contact in regards to this. But if there’s is someone better equipped for this let me know.

  • That’s not my job

    • This falls outside of my responsibilities but I would be happy to connect you with someone who can help.

    • I’m not the correct person to assist with this but I am happy to connect you with <insert name> who will be able to help

  • Stop assigning me so many tasks if you want any of them to get done

    • As my workload is quite heavy, can you help me understand what I should reprioritize to accommodate this new task?

  • Answer my emails

    • If there’s a better way to get in contact with you please let me know as I am hoping to have this resolved as soon as possible.

  • This is not my problem

    • I recommend directing this issue to <Name> as they have the proper expertise to best assist you

  • If you would have read the whole email you’d know the answer to this

    • I have included my initial email below which contains all of the details you are looking for.

  • I have absolutely no idea what you are talking about

    • Can you help me better understand what exactly is it that you require on my end?

  • Stop micromanaging

    • I am confident in my ability to complete this project and will be sure to reach out, if or when I require your input.

  • Please hurry and get this done!

    • It is important that we have this completed in order to meet our targeted deadlines which are quickly approaching.

  • Stay in your own lane

    • Thank you for your input. I’ll keep that in mind as I move forward with decisions that fall within my responsibilities.

  • I’ve told you this multiple times

    • There seems to be a disconnect here as this information has already been provided.

  • I’m not doing your job for you

    • I do not have the capacity to take this on in addition to my own workload but I’m happy to support where it makes sense.

  • We do not need to have a meeting about this

    • Being respectful of everyone’s time let’s discuss this through email until we have a more defined agenda.

    • Being respectful of everyone’s time, can we communicate about this via email moving forward?

  • Did you just take credit for my work?

    • It is great to see my ideas being exposed to a wider audience and I would have appreciated the opportunity to have been included in the delivery.

  • Google that yourself

    • The internet is a great resource for these types of questions and I am available to clarify elements that you are not able to find online.

  • What you are saying does not make sense

    • We seem to have a different understanding on this. Can you elaborate further on your thought process here?

  • I am not paid enough to do this

    • This falls out of my job description but if the opportunity for a role expansion becomes available I would be happy to discuss reworking my contract to better align with these new responsibilities.

  • I totally forgot about your email

    • Thank you for your patience,

  • I’m going to need a whole lot of more information if you want me to do this

    • Please let me know when further details become available as I require more information to successfully complete this task.

  • Stop calling me before my workday even starts

    • If you need to contact me, please note that my working hours being at 8 am and 6 pm. Communications received prior to this won’t be seen.

  • Check your inbox, I already sent this to you!

    • I previously sent you an email regarding that but please let me know if something went wrong in transit.

  • I couldn’t care less

    • I will defer to your judgment on this as I am not passionate either way and I trust your expertise.

  • I told you so and now this is your problem

    • I did previously note that this was a likely outcome. How do you plan to resolve this?

  • Stop trying to make me do your work!

    • I am not able to offer you additional support in completing your workload.

  • Try problem solving on your own before you come to me

    • I encourage you to brainstorm possible solutions prior to looping me in for additional support.

  • Can you do your job so I don’t have to?

    • Please let me know when your deliverables have been completed.

  • If further changes are required do them yourself.

    • If further edits are required, I have attached a version of the document that you can apply your edits directly into.

  • You should be the one doing this, not me.

    • It is my understanding that this is your responsibility. If that is not the case please let me know.

  • I don’t need to be included on this.

    • I do not feel as though I am able to add any value to this conversation. Please remove me from this thread and feel free to loop me back in in the future should my involvement be required.

  • I can’t read your mind. Be more clear on what you want.

    • In order to successfully complete this I will need further details on what is required.

  • Does taking on all this extra work come with extra pay?

    • With my role expanding is there a plan to review my title and compensation to better reflect these additional responsibilities?

    • As my role has organically evolved, can we schedule time to review my overall compensation and discuss whether or not it is still aligned with my current role and responsibilities?

    • Will these tasks be part of my job long-term? If so, is there an opportunity to reevaluate my job description, title, and overall compensation to more accurately reflect these additional responsibilities?

  • Stop promising unrealistic timelines.

    • Can you walk me through your thinking on these timelines? I have some hesitations with the dates shared.

  • I’ve not been properly trained on this

    • Is training available in order for me to successfully complete this?

  • If you have me scheduled in meetings all day, when do you expect me to get this work done?

    • My calendar is currently heavily scheduled with meetings. To ensure appropriate time is available to get this done I can sit out of lower priority meetings this week or extend the deadline on this project. Please let me know which is preferred?

  • If I’m doing your job for you, then what are you doing all day?

    • Is there a higher priority task that is consuming all of your capacity at the moment?

  • I can’t take on anymore work right now

    • I am unable to take that on at the moment as my current workload is quite heavy. Is there someone else who can assist with this?

  • Your micromanaging isn’t making this go any faster

    • Though I appreciate your attention to this, I feel as though I could be more productive if I had an opportunity to work independently here.

  • If you expect me to do the job of 3 people, then I expect you to pay me the salary of 3 people.

    • Are additional team members being added to take on these roles or will I be expected to absorb these responsibilities? If the latter, I would be happy to set up some time to discuss appropriate compensation for this role expansion

  • You are not my boss, stop trying to assign me work.

    • Have you connected with <manager name> in regards to me taking this on? As it has not been communicated to me that I’ll be working on this.

  • If you want it done your way then just do it yourself.

    • As you seem to have a very clear vision for the execution of this, I encourage you to take the lead here and I’m happy to support you where necessary.

  • I don’t want to work with you more than I have to.

    • Would you be open to replacing our frequent communications with a monthly touch base where we can discuss all updates during that time?

  • I don’t want to attend a work event during my personal time.

    • I’m unable to attend after working hours.

  • Does the company actually care about the employees?

    • Are there resources and boundaries in place to support the physical and mental health of employees?

  • How much does this role pay?

    • Can you share what the overall compensation looks like for this role?

  • Are promotions based on performance or politics?

    • Is there an opportunity for growth within the company and if so what is the main metric for promotion?

  • Do you have a culture that expects employees to put in over 40 hours each week?

    • Is it common within the company for employees to exceed 40 working hours per week?

  • Is the manager of this role a micromanager?

    • How involved is the reporting manager with this role?

  • Do you expect employees to be available 24/7?

    • What is the expectation for being available outside of working hours?

  • I don’t believe you.

    • I’m not confident that the information you have provided is correct.

  • You are wasting my time.

    • Being respectful of time let’s regroup when more details become available.

  • I deserve a raise.

    • Given my contributions to the company’s success along with a current market analysis of my role. I am setting up time to discuss a salary review.

  • The way you speak to me is disrespectful.

    • I encourage you to reevaluate the way you are speaking to me, as the disrespect you are currently displaying towards me is not welcomed nor will it be tolerated.

  • That idea is going to be an epic fail.

    • I am not in agreement with this idea and have hesitations moving forward.

  • I am burning out with this workload and your lack of support.

    • My productivity is being impacted by the overwhelming workload I am currently assigned. Is there any support you or the team can offer?

  • You are underpaying me.

    • There is a notable discrepancy between my current salary and the going market rate for the comparable roles.

  • My job has evolved but my salary has stayed the same.

    • As my role has expanded since joining the company, I would like to review my compensation so that it better reflects my evolved responsibilities.

  • I want a higher salary than you are offering me.

    • I was hoping to be in the X to Y salary range for this position.

  • If you can’t pay any more then what else can you offer.

    • I understand there are budget restrictions that limit your ability to increase my salary. However, I would like to understand if additional vacation days, benefits, bonus, and other overall compensation items can be offered.

  • Maybe if you communicated that with us sooner we wouldn’t be in this mess.

    • In the future it is important to share information like this with the team sooner so we might mitigate these sort of issues.

  • Nobody has a clue.

    • I failed to find any knowledge keeper for this.

  • Figure it out yourself!

    • I cannot assist. However, I am confident in your ability to find a solution here.

  • Well, one of us needs to do this, and it's not going to be me.

    • This task has to be prioritized, and I encourage you to take the lead on it.

  • Read the whole story
    emrox
    8 days ago
    reply
    Hamburg, Germany
    Share this story
    Delete

    View Transitions Applied: More performant ::view-transition-group(*) animations

    1 Share

    If the dimensions of the ::view-transition-group(*) don’t change between the old and new snapshot, you can optimize its keyframes so that the pseudo-element animates on the compositor.

    ~

    🌟 This post is about View Transitions. If you are not familiar with the basics of it, check out this 30-min talk of mine to get up to speed.

    ~

    With View Transitions, the ::view-transition-group() pseudos are the ones that move around on the screen and whose dimensions get adjusted as part of the View Transition. You can see this in the following visualization when hovering the browser window:

    See the Pen
    View Transition Pseudos Visualized (2)
    by Bramus (@bramus)
    on CodePen.

    The keyframes to achieve this animation are automatically generated by the browser, as detailed in step 3.9.5 of the setup transition pseudo-elements algorithm.

    Set capturedElement’s group keyframes to a new CSSKeyframesRule representing the following CSS, and append it to document’s dynamic view transition style sheet:

    @keyframes -ua-view-transition-group-anim-transitionName {
      from {
        transform: transform;
        width: width;
        height: height;
        backdrop-filter: backdropFilter;
      }
    }

    Note: There are no to keyframes because the relevant ::view-transition-group has styles applied to it. These will be used as the to values.

    ~

    While this all works there one problem with it: the width and height properties are always included in those keyframes, even when the size of the group does not change from its start to end position. Because the width and height properties are present in the keyframes, the resulting animation runs on the main thread, which is typically something you want to avoid.

    Having UAs omit the width and height from those keyframes when they don’t change could allow the animation to run on the compositor, but OTOH that would break the predictability of things. If you were to rely on those keyframes to extract size information and the info was not there, your code would break.

    TEASER: Some of the engineers on the Blink team have explored a path in which width and height animations would be allowed to run on the compositor under certain strict conditions. One of those conditions being that the values don’t change between start and end. The feature, however, has only been exploratory so far and at the time of writing there is no intention to dig deeper into it because of other priorities.

    ~

    In a previous post I shared how you can get the old and new positions of a transitioned element yourself. This is done by calling a getBoundingClientRect before and after the snapshotting process.

    const rectBefore = document.querySelector('.box').getBoundingClientRect();
    const t = document.startViewTransition(updateTheDOMSomehow);
    
    await t.ready;
    const rectAfter = document.querySelector('.box').getBoundingClientRect();

    With this information available, you can calculate the delta between those positions and create your own FLIP keyframes to use with translate to move the group around in case when the old and new dimensions (width and height) are the same.

    const flip = [
    	&grave${(rectBefore.left - rectAfter.left)}px ${(rectBefore.top - rectAfter.top)}px&grave,
    	&grave0px 0px&grave,
    ];
    
    const flipKeyframes = {
    	translate: flip,
    	easing: "ease",
    };

    The generated keyframes can then be set on the group by sniffing out the relevant animation and updating the effect’s keyframes.

    const boxGroupAnimation = document.getAnimations().find((anim) => {
    	return anim.effect.target === document.documentElement &&
    	anim.effect.pseudoElement == '::view-transition-group(box)';
    });
    
    boxGroupAnimation.effect.setKeyframes(flipKeyframes);

    Because the new keyframes don’t include the width and height properties, these animations can now run on the compositor.

    In the following demo (standalone version here) this technique is used.

    See the Pen
    Better performing View Transition Animations, attempt #2, simplified
    by Bramus (@bramus)
    on CodePen.

    (Instructions: click the document to trigger a change on the page)

    When the width and height are different, you could calculate a scale transform that needs to be used. I’ll leave that up to you, dear reader, as an exercise.

    ~

    In the following demo the default generated animation and my FLIP-hijack version are shown side-by-side so that you can compare how both perform.

    See the Pen Regular and Better performing View Transition Animations side-by-side by Bramus (@bramus)
    on CodePen.

    Especially on mobile devices the results are remarkable.

    ~

    Read the whole story
    emrox
    11 days ago
    reply
    Hamburg, Germany
    Share this story
    Delete

    Don't be Frupid

    1 Share

    Frupidity: The Silent Killer of Productivity and Innovation

    Frugality is a virtue. The art of doing more with less, making sharp trade-offs, and keeping waste at bay so the good stuff – innovation, growth, maybe even a little joy – has room to thrive. Any engineer worth their salt knows the power of an elegant, efficient solution. A few well-placed optimizations can turn a sluggish system into a rocket.

    But frugality has a dark twin – a reckless, shortsighted impostor that mistakes cost-cutting for efficiency and penny-pinching for wisdom. Enter frupidity, or stupid frugality – the obsessive drive to save money in ways that ultimately cost far more in lost productivity, morale, and sanity. It’s the engineering equivalent of “optimizing” a car by removing the brakes to improve gas mileage.

    The Many Faces of Frupidity in Engineering

    Frupidity thrives in large orgs, where budgets are tight, bureaucracies dense, and someone, somewhere, is always trying to impress a spreadsheet. The best part? It usually masquerades as good stewardship.

    Tool Penny-Pinching

    “Why are we spending $15 a month per seat on this tool?” a manager asks. A fair question – except no one factors in that without it, engineers will burn hundreds of hours manually wrestling with tasks that a good automation could have handled in minutes. Multiply that by a hundred devs, and suddenly that “savings” is bleeding the company dry.

    Hardware Stinginess

    “No reason to buy high-end laptops when these entry-level machines get the job done.” Sure – if your definition of ‘getting the job done’ includes waiting five minutes for each build to compile. Those little delays don’t show up in the budget, but they pile up in engineers’ heads like a slow poison, turning momentum into molasses.

    Infrastructure Sabotage

    Cutting cloud costs by downgrading instances or consolidating databases into a single underpowered behemoth? Brilliant. Until query performance plummets and every engineer waits an extra five seconds per request, day in, day out. That’s not saving – it’s death by a thousand cuts.

    Travel Masochism

    Slashing travel budgets? Great idea – until engineers start taking three-hop flights with overnight layovers instead of direct ones. Productivity nosedives. Morale craters. Someone finally realizes the cost of these savings is burning more money than the travel budget ever did.

    Conference Austerity

    Conferences get nuked because someone upstairs sees them as a “nice to have.” The irony? That conference could’ve been where your engineers learned about a new technique that would’ve saved you a million bucks in infrastructure costs. Instead, they’re stuck reinventing the wheel – badly.

    The True Cost of Frupidity

    The worst thing about frupidity? It doesn’t look like a single, catastrophic failure. It creeps in quietly, like rust on an old bridge. The slow grind of waiting for a test suite to run because someone thought dedicated CI/CD machines were too expensive. The lost momentum of a brilliant engineer who spends half his time wrestling with red tape instead of building something great. The death of a thousand paper cuts.

    And because it doesn’t feel like an immediate disaster, leadership rarely notices – until it’s too late.

    Case Study

    Take a company I once worked with – let’s call them PennyTech. Picture a bland office park in the outer ring of a mid-sized city, where the air is thick with the dull hum of fluorescent lights and motivational posters. PennyTech had a frupidity problem so bad, it felt like a social experiment in suffering.

    They refused to pay for the professional version of a critical SaaS tool because the free tier technically worked. Never mind that it came with rate limits that forced engineers to stagger their work, or that it lacked automation features that would have streamlined half the team’s workflow. Still, the Powers That Be declared: We do not pay for what we can get for free.

    Then one day, some unsuspecting soul opened a spreadsheet, probably out of boredom or because they’d read too many corporate best-practice blogs. Turns out, that “free” tier had devoured over 500 hours of productivity in a single year.

    It’s not that PennyTech lacked intelligence; it’s that they had somehow misplaced it behind a locked budget door, believing they could outfox mathematics with good intentions and a healthy dose of denial. If there’s a moral here, it’s that sometimes the most expensive thing you can buy is the illusion of getting something for nothing.

    The Frupidity Playbook

    Want to maximize frupidity in your company and tank your engineering org? Let’s go:

    1. Give engineers the cheapest laptops money can buy. Who needs fast compile times when they can take a coffee break between builds?
    2. Ban taxis. If employees aren’t suffering through public transport, are they even working hard enough?
    3. Buy the worst coffee available. Bonus points if it comes in a bucket labeled Instant Beverage, Brown, Powdered.
    4. Make travel as painful as possible. If it’s not a three-hop flight with an overnight layover, you’re just throwing money away.
    5. Cancel all training and conferences. If devs really want to learn, they’ll figure it out in their spare time.
    6. Consolidate databases onto one overloaded server. Nothing screams optimization like a query that takes ten minutes to run.
    7. Mandate approval processes for everything. Need a second monitor? That’s a three-step approval process with a 90-day SLA.
    8. Measure success in savings, not productivity. If your engineers are miserable but the budget looks good, mission accomplished.

    Go forth and squeeze those pennies! Just don’t be surprised when your best people walk out the door – probably straight into a taxi you wouldn’t reimburse.

    Fighting Frupidity Before It Kills Your Org

    The antidote to frupidity isn’t reckless spending. It’s smart spending. It’s understanding that good engineering isn’t about cutting corners – it’s about knowing which investments will pay off in speed, efficiency, and sanity.

    Here’s how to fight it:

    1. Treat engineering time Like the Scarce Resource it is. Saving a few bucks on tools or infrastructure is meaningless if it costs engineers hours of wasted effort.
    2. Track hidden costs, not just line items. Look beyond the immediate savings – what’s the real cost of this decision in lost productivity?
    3. If it’s a tool for engineers, let engineers decide. Frupidity often comes from non-technical managers making technical decisions.
    4. Fix problems, don’t work around them. A small investment in the right place can remove an entire category of pain.
    5. Make it personal. Would you be willing to suffer through the inconvenience of a frupid decision? If not, don’t expect your team to.

    Bureaucracy: Frupidity’s Best Friend

    Bureaucracy and frupidity feed off each other. Bureaucracy clogs the gears, frupidity makes sure no one oils them. Process takes priority over results, and before long, efficiency is just a memory.

    At its core, bureaucracy exists to create consistency, reduce risk, and ensure accountability. Sounds reasonable. But large orgs don’t just create a little process to keep things smooth; they create layers upon layers of rules, approvals, and oversight, each one designed to solve a specific problem without ever considering the full picture.

    The result? No one is empowered to make simple, logical decisions. Instead, every request gets funneled through multiple approval steps, each gatekeeper incentivized to say “no” because “yes” means taking responsibility. Need a new tool? Fill out a form. Need a monitor? Get approval from finance. Need to travel? Justify the expense to three managers who have no context on why it matters.

    And here’s the real kicker: bureaucracies love small, quantifiable savings but hate measuring intangible costs. A finance department can easily see that cutting taxi reimbursements saves $50 per trip. What they can’t see is that forcing employees to take three-hour public transit journeys leads to exhaustion, frustration, and bad decision-making that costs thousands in lost productivity. Since no one is directly accountable for those hidden costs, they don’t count.

    Bureaucracy also breeds fear. The safest move in a bureaucratic system is always the one that involves the least immediate risk – so people default to defensive decision-making. It’s safer to deny an expense than approve it. It’s safer to force engineers to “make do” with slow tools than to spend money on something that might not show instant ROI. Every layer of approval adds more hesitation, more process, more distance from common sense.

    And because bureaucracies are designed to be self-sustaining, they never get smaller. Instead, they metastasize. Every new problem gets a new rule. Every new rule adds friction. Every added friction creates more inefficiency. Until one day, the company realizes it’s spending more time on approvals than on actual work.

    By then, the best employees have left. The ones who remain are either too exhausted to fight or have figured out that the real skill in a bureaucratic org isn’t building great things – it’s navigating the system. And that’s how frupidity wins.

    Conclusion: Smart Frugality is the Real Efficiency

    Frupidity isn’t just an engineering problem – it infects every corner of a company when the culture values cheapness over wisdom. The best companies don’t just cut costs – they invest in the right places.

    The final test for frupidity? Would you make the same trade-off if it was your own time, your own money, your own problem to solve? If the answer is no, it’s not frugality.

    It’s just plain frupid.

    Read the whole story
    emrox
    11 days ago
    reply
    Hamburg, Germany
    Share this story
    Delete
    Next Page of Stories