HN user

snake_case

1,274 karma

https://github.com/jacobdeichert

Posts110
Comments98
View on HN
puzzlepanda.com 4y ago

Show HN: I built a jigsaw puzzle website

snake_case
124pts73
tailscale.com 4y ago

Hey linker, can you spare a meg?

snake_case
3pts0
puzzlepanda.com 5y ago

Show HN: I built a jigsaw puzzle website

snake_case
19pts9
devblogs.microsoft.com 5y ago

Announcing TypeScript 4.0 RC

snake_case
3pts1
github.com 6y ago

Show HN: A CLI task runner defined by a markdown file

snake_case
2pts1
github.com 7y ago

Just a command runner

snake_case
1pts0
dave.cheney.net 8y ago

Taking Go modules for a spin

snake_case
1pts0
github.com 8y ago

Tarpc: An RPC framework for Rust with a focus on ease of use

snake_case
3pts0
blogs.msdn.microsoft.com 8y ago

Announcing TypeScript 2.8 RC

snake_case
3pts0
github.com 8y ago

Show HN: Rust WebAssembly A* Pathfinding Demo

snake_case
12pts0
aimlesslygoingforward.com 8y ago

Porting Dose Response to WebAssembly

snake_case
1pts0
crystal-lang.org 8y ago

Crystal Survey 2017 Results

snake_case
60pts5
news.ycombinator.com 9y ago

Ask HN: What's your blog/website stack look like?

snake_case
4pts1
blog.chromium.org 9y ago

Integrating Progressive Web Apps Deeply into Android

snake_case
2pts0
medium.com 9y ago

The JavaScript Community Has a Bullying Problem

snake_case
10pts5
plaintextoffenders.com 9y ago

Plain Text Offenders

snake_case
2pts3
webkit.org 9y ago

Introducing Custom Elements

snake_case
231pts111
code.facebook.com 9y ago

Wedge 100: More open and versatile than ever

snake_case
2pts0
jakedeichert.com 9y ago

RSS Feeds and Slack

snake_case
1pts0
applehelpwriter.com 9y ago

Dropbox hack blocked by Apple in Sierra

snake_case
4pts0
www.thestar.com 9y ago

1 tax haven, 3 of Canada’s biggest banks, 2,000 offshore companies

snake_case
1pts0
github.com 9y ago

Mozilla Neo – Create React apps with zero initial configuration

snake_case
3pts0
developers.google.com 9y ago

Shadow DOM v1 spec: self-contained web components

snake_case
4pts0
github.com 9y ago

Project Tofino – A browser interaction experiment by Mozilla

snake_case
43pts12
nylas.com 9y ago

PGP and Nylas

snake_case
4pts0
nativebase.io 10y ago

NativeBase – Component Framework for React Native

snake_case
2pts0
ponyfoo.com 10y ago

The Double-Edged Sword of the Web

snake_case
1pts0
arstechnica.com 10y ago

Google’s plan to make Chrome’s Flash click-to-play

snake_case
5pts3
productforums.google.com 10y ago

FOUT is back in Chrome 50

snake_case
69pts30
repl.it 10y ago

Repl.it – Interactive programming environment and API

snake_case
4pts0

It’s great to see more tools taking advantage of the markdown syntax.

I’m the creator of Mask[0], a very similar tool built with Rust. I was originally inspired by Maid[1], which is an older take on this idea built with Node and no longer maintained I believe.

I see this is based on Node as well, and I appreciate that it currently has zero dependencies. Nice work!

[0] https://github.com/jacobdeichert/mask

[1] https://github.com/egoist/maid

Mask can't directly solve this problem by itself, it just runs whatever script you give it. If you can write a python/js/bash/etc script to achieve what you want, you can stick it inside a maskfile with the rest of your commands.

Regarding docker, I haven't tried it on M1 yet. However, I've been using Ubuntu multipass [1] for over a year now and I'm very happy with it. It makes it easy to set up and manage VMs for different projects, and it seems to run very efficiently on macOS in my experience. When a project needs a docker container like postgres, I just run docker compose inside the VM rather than running it directly in macOS. You can also limit the amount of CPU/RAM the VM uses to keep things under control.

[1] https://github.com/canonical/multipass

Before mask, I used a custom bash command runner which relied on a directory structure to implement the command and subcommand tree. This was pretty simple and nice to use. So if it’s working for you, there’s no reason to look for alternatives.

Mask takes advantage of the markdown structure in a few ways. Headings define top-level commands and subheadings represent nested subcommands, which makes it extremely easy to structure a command tree. Also, mask checks the code block lang code (ruby, python, js, fish, etc…) and executes the script using that runtime as long as you have it installed. There’s other features, but those two are great examples why markdown works well as a command definition format.

Nice to see other markdown-based task runners!

I'm the creator of mask which is another alternative, written in Rust. Our approaches slightly differ. It looks like xc parses the README.md file for commands while mask looks for a maskfile.md by default, though you can provide a --maskfile arg to specify any markdown file that follows the expected format.

https://github.com/jacobdeichert/mask

Good question and sorry for the confusion! I originally launched with an optional paid tier which I have since removed. Currently there is no business model. I happily run this at a loss as my costs are very low.

All great points, thanks for the feedback! :)

The smudge tool radius idea was especially interesting and something I’ll need to think about further. Very curious how it would affect the UX for beginners vs power users. Could be a great improvement for touchscreen devices as well.

Thank you! I’m aiming to provide a more polished and user-friendly experience than the alternatives out there, and I have many plans to differentiate ever further. Glad you had a good time playing.

Thanks, glad you enjoyed it! As another reply mentioned, single click/tap on a piece auto rotates it to the correct orientation.

Many have pointed out the auto rotation is either too easy or annoying, so I am considering alternatives. I originally started with single click to rotate 90deg but was told by early users it was too hard. Reconsidering ways to introduce this that is friendly to all users.

I’ve heard someone do exactly that before too! Always fun finding ways to break the rules :)

Others in here are suggesting snap on drop instead of auto snapping, which I’m strongly considering now.

Yeah, good point regarding snapping on drop which would allow making the drop zone a little larger.

Drag selecting multiple pieces is interesting. If I add that, I think I would need a modifier key like shift or cmd/ctrl to differentiate between this and a background drag.

Thanks for the report! Firefox was the browser I used during development and also needed the most work regarding performance. The image quality is heavily tied to rendering performance, so I’ll need to consider ways to improve this further.

There shouldn’t be any missing pieces and the puzzle engine has been tested thoroughly, so this is surprising to hear. Unfortunately I can’t investigate since demo puzzles are not persisted. Sorry about this! My theory is that it got lost far off screen and I need to prevent that from happening.

Glad you enjoyed it. Orienting the pieces up front does annoy others as well, so I'm considering options to make this a bit more friendly.

Good point regarding the picture being obscured at the end. I think this especially affects mobile.

Sorry to hear that! I have an up-to-date iPad Air 2 and I've tested playing in Safari quite a bit. The touch accuracy is a little annoying and dragging the background unintentionally occasionally happens. I think I can improve this by increasing the touch area around pieces to be a bit more forgiving. Thank you for reporting.

Thanks! Yeah, it's been hard to decide what to do about mobile. The experience is not great with the high piece counts. I might consider offering puzzles with smaller piece counts if they are started on a mobile device, vs desktop. But this may affect my plans for adding (optional) leaderboards and making things a little more competitive.

Good points! With my websocket test I'm currently experimenting with syncing micro actions rather than syncing the full puzzle state every time a user makes a move. For lag compensation I'm likely just going to lerp the mouse/piece position movements to make them appear smooth, but I'll see how well that works out.

Yeah, I think I need to tweak the snap distance a bit further. Sometimes pieces snap together unintentionally while dragging across the canvas, which surprises users.

Would you be able to clarify the second point? You can drag groups of pieces to connect to other groups. But I have a feeling you're talking about something slightly different.

Thanks for the report, that is very odd. It sounds like the mouse position might be offset. I haven't ran into this yet when testing Chrome on Windows 10, but I'll take another look. Sorry about that!

You would be surprised then :)

Looking forward to adding multiplayer soon! I actually added websocket support last week and I'm currently running a test in the background to see how many I can handle concurrently.

Other than that, I have many ideas to make the paid plan more valuable too!

Yeah, this is something I'm considering still. I've heard from a few users that they don't like the pieces being rotated at all, and some would rather have click-to-rotate to make it more difficult.

I might have to make this an option, but waiting to hear from more users on this before deciding.

Hi HN!

I built this website last year for family members who enjoy playing jigsaw puzzles on their computers. I decided to build it because I frequently heard complaints about how slow some of the more popular jigsaw apps are and how they are filled with annoying advertisements.

The site is completely free to use. No advertisements and no selling of user data. However, I do offer a paid tier for users that want more jigsaw puzzles and difficulty options.

On the technical side, I'm using Svelte on the frontend with a tiny bit of wasm, and Rust for a few backend APIs. I hope the site feels snappy, it's one of the main reasons why I decided to build it.

There's a demo puzzle linked on the home page for anyone who doesn't want to sign up! I'd recommend trying it on a computer or tablet as mobile is still a little rough around the edges.

Happy to answer any questions about it!