- All operations done fully client-side - no backend, no private data leaves your browser. - Uses machine learning models (MediaPipe Face Detector task) to automatically scale and position glasses on the detected faces. - Extensive customization options for glasses: - Placement of glasses anywhere on the input image (including slightly going outside it). - Change the size of glasses. - No limit on the number of glasses. - Flip the glasses vertically or horizontally. - Customize the direction from which the glasses appear on the image. - Different types of glasses. - GIF output options: - Looping mode. - Number of frames. - Frame delay. - Separate delay setting for last frame. - Output size. - Celebration confetti - Easter eggs.
I've been working remotely for the last >9 years. When using non-verbal communication, it's important that your tone and intent comes across accurately.. Custom emojis became for me part of expressing yourself, creating bonds and camaraderie. I've originally created an MVP of this tool while applying for a exciting new job opportunity. As a showcase of my passion for programming, building teams and creating delightful user experiences. Unfortunately, they were not impressed and ultimately did not offer me the job :( But I wanted to polish it and release it for everyone to use for free, so that you can too "Deal With It"!
I have more ideas for even more features (check GitHub[1]), but wanted to launch it and see what's the feedback and ideas from the community! And if you're looking for a Fullstack Developer with >14 years of experience, with passion for great customer experience (remote work or locally in Iceland), let's chat!
Sorry to hear that. No recruiting process is perfect. They often get it wrong, as they clearly did here!
Hire.
Interviewed another Dev who made arcade sticks as a side project.
Hired.
You can't teach passion. Hire all that passionate people you can. Tech stacks are irrelevant compared to the love of building things.
I was not hired once because I didn't have React experience, despite having years of both Vue and Angular and having led teams building non-trivial apps in both. IME focusing on such a minor detail like that means either a) you're going to be so pressured to get stuff out of the door they can't handle slightly lower productivity for a month while you learn the different syntax, and/or b) the person hiring you isn't technical enough to know this is a minor detail.
Either way, better off somewhere else :)
I had a great experience at that company while I was in college, which also launched me into an exciting professional career. All of it wouldn't have happened without people like you.
There may be other factors. Hiring is complex. They could have judged tbis fairly and they may have had a better candidate. Having a project like this should probabilistically increase your chances.
[1] https://m.youtube.com/watch?v=fJ9rUzIMcZQ&pp=ygURYm9oZW1pYW4...
if (looping.mode === "off") {
// If you waited for a day, you deserve to see this workaround...
// Since there is no way to not loop a gif using gifwrap,
// let's just put a reeeeaaaaallly long delay after the last frame.
return 8640000;
}Only recently started using Discord, and joined various “servers”, which seem as basically just groups with chats. When I was prompted to create my own “server”, at first was hesitant thinking “whoa, I don’t want them to provision a whole server for me, that can’t be cheap”, then realized it has nothing to do with actual servers.
I want to start using it as well, but I just feel like an old person, not really getting it
;)
If so, why do we need to slap a corporate label onto them? Can’t you just describe them as such?
I’m not trying to be cynical or rude, but this just feels wrong to me.
Also, glasses can only be black? We demand a color palette for glass colour.
EDIT: wait, I managed to make the glasses come from below
blob:https://emoji.build/50c07035-efb9-4341-9205-30adfd6b088e
I retract my indignation on the one half of my requests, but transfer it doubly so for the request of a colour palette
All thanks to some clever (mis)use of SVG and canvas, see https://github.com/klimeryk/dealwithit/commit/d8f280b5f2e4bd.... Enjoy!
You can choose different styles of glasses. But, yeah, they're all black-ish. Definitely open to different colors/styles! I've created a new issue with some possible solutions and will look into it: https://github.com/klimeryk/dealwithit/issues/33 (but PRs are welcome too!)
The job market is rough. I have no doubt you were considered, and they were interested, but everyone is giving their all right now. Someone likely submitted something even cooler, somehow.
yeah by recycling their project from a previous interview and adding more to it
I just don't engage in that kind of assessment anymore, the job market isn’t thaaaat tough to need to compromise
or, put another way, jumping through that hoop will not solve your interview progress as its just far too subjective. other hoops are just as fine
I’m finding it absolutely brutal. I’ve never encountered anything like it. I could be doing something wrong, though.
When they give feedback, they love getting on their soapbox and critiquing others as if they were Olympic judges or something.
I’ve had to hold myself back from saying bro we wouldn’t hire you yourself if this criteria actually had to be met.
Some hiring managers require all this elaborate prep work and it’s such bullshit, imo it’s a total cop out to have people do so much work as part of the interview process.
It’s the lazy way of evaluating someone versus thoughtfully putting together a good hiring process and conducting effective interviews.
Desktop Safari 18.0.1 (18619.1.26.111.11, 18619)
I love Apple but Safari is the new IE, it’s more and more common for feature to take x then fixes for Safari take x^2, it is a joke of a browser.
Unhandled Promise Rejection: Error: StartGraph failed: $Service "kGpuService", required by node mediapipe_tasks_vision_face_detector_facedetectorgraph__mediapipe_tasks_components_processors_imagepreprocessinggraph__ImageCloneCalc...
Warnings prior to the error: [Warning] I0000 00:00:1729008143.963000 1 gl_context_webgl.cc:81] Couldn't create webGL 2 context. (vision_wasm_internal.js, line 1087)
[Warning] W0000 00:00:1729008143.966000 1 gl_context_webgl.cc:106] Creating a context with WebGL 2 failed: UNKNOWN: emscripten_webgl_create_context() returned error 0 (vision_wasm_internal.js, line 1087)
[Warning] === Source Location Trace: === (vision_wasm_internal.js, line 1087)
[Warning] third_party/mediapipe/gpu/gl_context_webgl.cc:82 (vision_wasm_internal.js, line 1087)
[Warning] W0000 00:00:1729008143.967000 1 gl_context_webgl.cc:107] Fall back on WebGL 1. (vision_wasm_internal.js, line 1087)
[Warning] I0000 00:00:1729008143.968000 1 gl_context_webgl.cc:81] Couldn't create webGL 1 context. (vision_wasm_internal.js, line 1087)
[Warning] W0000 00:00:1729008143.968000 1 gl_context.cc:1000] OpenGL error checking is disabled (vision_wasm_internal.js, line 1087)
[Warning] E0000 00:00:1729008143.968000 1 gl_graph_runner_internal.cc:252] StartGraph failed: INTERNAL: Service "kGpuService", required by node mediapipe_tasks_vision_face_detector_facedetectorgraph__mediapipe_tasks_components_processors_imagepreprocessinggraph__ImageCloneCalculator, was not provided and cannot be created: emscripten_webgl_create_context() returned error 0; StartRun failed (vision_wasm_internal.js, line 1087)
[Warning] === Source Location Trace: === (vision_wasm_internal.js, line 1087)
[Warning] third_party/mediapipe/framework/calculator_graph.cc:651 (vision_wasm_internal.js, line 1087)
[Warning] third_party/mediapipe/framework/calculator_graph.cc:682 (vision_wasm_internal.js, line 1087)
[Warning] third_party/mediapipe/framework/calculator_graph.cc:551 (vision_wasm_internal.js, line 1087)
[Warning] research/drishti/app/pursuit/wasm/graph_utils.cc:87 (vision_wasm_internal.js, line 1087)
Hope that helps!If *after* generating a gif you change the gif size (bigger in my case) the new gif has the sunglasses appear in the same place. But if I change the size first and then generate everything work fine.
Hope I explained it right
This is great for mastodon replies so PLEASE make this work.
Hang tight!
> There are only two hard things in Computer Science: cache invalidation and naming things.
* Found it, there is a small indicator in bottom right of glasses that allows dragging out to resize. Thanks all!
Graph successfully started running.
Uncaught (in promise) Error: Unsupported MIME type: application/xml
at Et.a (gif.worker-WYu6DU4i.js:23:56331)
at Et.zt (gif.worker-WYu6DU4i.js:23:78271)
This might be caused by my workplace enforcing the Okta chrome plugin :(Minor UX notes: - clicking the header doesn't navigate back to the "home" screen - singular page history (so the back button doesn't take you back to the previous page state)
Combined it made it not intuitive for me how to "get rid" of the selection I'd created (I eventually figured it out, but the previous two points were what I intuitively tried first)
Could you describe in more detail this? I'm not sure I agree that state changes should be pushed to browser history. In my experience this usually leads to confusing user experience. But that might be also just years of conditioning and I'm missing some best practices. So happy to learn more.
Just as something to be a quick "oops, didn't want to use that image, I want to go back to how the site is when I first visited it", and essentially wipe the state.
The history stuff is secondary, since that was my second instinct after trying to find and hit a "home" button, just from my personal UX perspective.
I lied, in fact I just used it to create a couple Slack emojis.
That's what kept me going while adding more features :D Just the joy of creating something so useless, but still capable of bringing smile to my (and hopefully your too!) faces. Glad you love it!
Otherwise incredible. The customization options are much appreciated.
Source: I've made way too many GIFs for Telegram.
Oh, and it would be cool to have an option for the meme text to go under the image too, and to appear in the final frame of motion for the glasses. For now, I can DEAL WITH IT!
Good suggestion - implemented in https://github.com/klimeryk/dealwithit/commit/12c2254e4a1e5f...
> Oh, and it would be cool to have an option for the meme text to go under the image too, and to appear in the final frame of motion for the glasses
Yup, on my radar! Upvote on GitHub: https://github.com/klimeryk/dealwithit/issues/31
Unhandled Promise Rejection: Error: Unsupported MIME type: application/xml
On this line:
Q = await getGlassesImages(p, D, O);
This is a 2020 M1, Safari 17.6.
https://jammaloo.com/DealWithIt/
It uses face-api.js to find the face, and then move the sunglasses over it. It's about a 5 meg model, so it's pretty slow to load. You can customize with a URL, or drag and drop an image on. Resizing the browser also moves the glasses around.
Very happy to see someone take the idea way way way further!
> It uses face-api.js to find the face
Yeah, I'm using Google AI's Face Detector [1]. There's Tensorflow's Face Landmarks Detection [2] that looked most promising and accurate. But it had two bugs [3][4] that are blockers. The first one got fixed recently, but the other one is still pending.
[1] https://ai.google.dev/edge/mediapipe/solutions/vision/face_d...
[2] https://github.com/tensorflow/tfjs-models/tree/master/face-l...
Just noticed what company you did leave and I have even more respect for you.
Someone get this guy a job please.
[1]: https://giphy.medium.com/the-secret-giphy-slack-commands-9cb...
What I miss feature-wise from my variant is text. IIRC, I had two lines of text (top and bottom, rendered in capital Impact of course) that were configurable on when they appear and for how long.
The main use of the text was to tease friends supporting rival sports teams after lost games. E.g. "STILL THE BEST" "DEAL WITH IT".
(bad in a taste way, not in the engineering way)
The company you were applying to sure missed out!