1,274 karma · joined December 22, 2014
This project is a very small hyper/tokio backend API. However, I also work on a CLI tool [1] I created which has very fast recompile times, usually less than a second. Mostly because it's pretty light on dependencies.
A little bit later I wrote a CLI task runner [2] which is defined by a simple markdown file. I find Rust to be perfectly aligned with the goals of a CLI utility: single deployable binary and very low startup cost.
Most recently I launched a side project [3] (a jigsaw puzzle website) using Rust as my backend API service. I've been slowly building up a server framework over the years and finally was able to put it to use! Yes, it took me much longer to ship something in Rust versus other languages I'm more familiar with. But after learning Rust for a few years now, it doesn't take me much more time to build a feature than it would in another language.
Early on, I ran into a lot of borrower issues and got stuck many times. But after I got over those problems, I realized that for any future hurdles I would face, I just needed to keep pushing and eventually I would find a solution. I have found that with game development or heavily stateful apps, I tend to run into borrower issues more often. But for an API service with a simple input and output, I almost never run into borrower issues.
[1]: https://github.com/jakedeichert/wasm-astar
[1]: https://www.digitalocean.com/blog/introducing-bring-your-own...
Is your 2021 roadmap public, or is Canny your official roadmap? Really interested to see what's coming soon :)
[1]: https://feedback.render.com/features/p/deploy-docker-images-...
Btw, I've been working at Canny for the past year and was pleasantly surprised to see your feedback site!
@rita3ko I would love the ability to disable automatic preview builds. My "production" branch which Cloudflare Pages deploys from has a /public directory which I ship, but my other branches are not structured the same and therefore cause build failures. I just don't need preview builds for my use case.
Yupp, it's on my todo list to give users the option on how difficult they want the rotation to be. So far I have users that want click-to-rotate and even no rotation at all.
It takes someone who really cares about performance and monitors it to make a fast web app and to keep it that way. Unfortunately it's still too easy to accidentally make it slow.
As an example, my grandmother-in-law has been putting up with Microsoft Jigsaw's desktop app for years. Last time I watched her load it, we sat there for awhile and had to restart multiple times because it was getting stuck loading some advertisements. The startup time was absolutely brutal and the run-time performance while playing wasn't great either, even with a decent laptop.
So when I saw how slow, bloated and laggy this app was, I wanted to try to make her a better jigsaw app for the web and I think I succeeded [1]. It loads almost instantly, has no advertisements, and feels super smooth while playing... and it's mostly just js, svelte and a little bit of Rust WASM.
Anyway, I do prefer a good native app over a web app when available. But with native apps, it's also harder to block ads and other trackers compared to the web.
Apart from that website, I have also open sourced a Rust CLI task runner [2] which uses markdown files as a command definition format. This is probably the most important tool I've ever written, as I have used it every single day since.
Since this is a side project for me, there wasn't much risk if it ended up being a bad decision. Multiple times throughout the project I got frustrated with the DX of existing http frameworks I tried and ended up building my own [2] on top of hyper. However, after launching my site and seeing how it performs in production, I could not be happier with the result! I had a bit of Rust experience before the project but learned a lot more through building this.
For you and others, I think it really depends on the situation. Building a Rust CRUD app will likely take longer than the other languages you're used to as the ecosystem is under heavy development, especially with async/await. So if you or your team are in a rush, I'll just echo that you should build with the tools you already know. If you have time and budget to experiment like I did, it might be worthwhile and I can promise it will be fun :)
[1]: https://github.com/sfackler/rust-postgres
[2]: https://twitter.com/jakedeichert/status/1205230350160539650
I recently just launched this jigsaw puzzle website!
The reason I originally built it was for a few family members who were tired of how slow other jigsaw apps were. I wanted to build something faster and easier to use.
Even if it doesn’t take off, I have a few players already that want me to keep updating it. I don’t mind since it’s pretty cheap to host and doesn’t require any maintenance. It also serves as my first attempt at running a side business with an optional premium subscription tier. And the last thing is that it’s an experiment for me to see how well Svelte and Rust perform in production :)
I was planning on adding scrollwheel zoom support soon for computers, and pinch to zoom on mobile is a must have.
Regarding snapping pieces inadvertently and cheating, I might try to reduce the snap distance if someone is dragging a piece above a certain speed. That should help a bit.
For auto rotation, I’ve heard from a few people that they want rotation completely disabled, while others want it to be more challenging and not automatic. I might need to offer users an option around this.
EDIT: just noticed your point about preventing snapping to hidden pieces on a stack. Great idea too! I’ll likely give that a try :)
When you first tap or click on a piece, it auto rotates to its correct rotation.
I'm thinking about adding an option to let people choose if they want to click-to-rotate or even disable rotation completely.
Great point about the demo not being visible enough. I'm going to try to improve that right now.
EDIT: I just deployed an update to include the demo button near the top of the landing page :)
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. So, over the course of many weekends and weeknights, I slowly developed this site with the helpful feedback I received from my family and friends.
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, a harder difficulty mode, and a few other perks.
On the technical side, I'm using Svelte on the frontend with a tiny bit of wasm, and Rust for my backend API. 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!
Never launched... it became another unfinished project. I eventually realized that I don't really need to store that many bookmarks.
Fun fact, the client is very lightweight and completely written in svelte, except for a tiny rust/wasm helper lib. The backend is 100% rust paired with postgres. I wrote my own tiny server framework on top of hyper which is much nicer to use than most of the heavier frameworks I've tried.
Anyway, the site is almost complete, just finishing up a few minor details before launching it to the public! It has a free tier as well as a paid tied for users that want more.
If you're interested in trying it, please do reach out :)
After launch, I plan on tweeting about it and about building my first business as a solo dev.
I used to have a scripts directory for each project, but I really wanted basic argument/options parsing and subcommands. That's mostly why I made mask. Now I use it daily as a project-based task runner, as well as a global utility command.
To summarize mask, it's a cli tool that looks for a maskfile.md in the current directory and parses it for commands. A maskfile.md is both a human-readable document and a simple command definition format. Tasks can be defined in sh, bash, zsh, fish, js, python, php, and ruby.
Though it's not at v1.0 yet, I've been using it daily in personal projects and also as a global system utility for handy commands and automation tasks.
Happy to answer any questions!
Location: Toronto
Remote: Yes (Remote only)
Willing to relocate: No
Technologies: Rust, TypeScript/Node, GraphQL, Go, PostgreSQL, MySQL, Stripe checkout & subscriptions, Kubernetes, WebAssembly, React, Svelte
Résumé/CV: email me to request it!
GitHub: https://github.com/jakedeichert
Email: see profile :)
This got me so many times. I was frustrated enough that I set up a headless chrome prerenderer to snapshot my gatsby-built site before every single deploy just so I could verify the html diff to make sure my site looked correct still.
The trust issues alone were enough to make me switch off of it.
Not only is Gatsby over-engineered, it's also bloated IMO. I think one of their main selling points it that page loads seem instant. Preloading other pages in the background seems needless to me when we're talking about a simple blog. Sure, it might be good for apps, but forcing my (few) visitors to download needless mbs on desktop or mobile seems like a bad user experience to me.
After that little project, I got started on an api service in Crystal. Crystal was interesting to try out, but I decided to switch to Rust after a few weeks since the ecosystem/community is much larger. I first chose to use the Rocket framework [0] but switched to actix-web [1] after a few weeks so I didn't have to use nightly anymore. So far actix-web has been great, but I'll be keeping my eye on Rocket going stable hopefully sometime in 2019, and also another library called warp [2].
I've also got another wasm project in the works... hoping to finish that off soon and publish sometime next month.
[0]: https://github.com/SergioBenitez/Rocket
A* was probably one of the most fun projects I did back in school a few years ago. If anyone is interested, last winter I ported an old C#/Unity A* implementation of mine to Rust and compiled it to WebAssembly for a small demo. It was my first time trying out wasm and really getting into Rust.
Repo: https://github.com/jakedeichert/wasm-astar
Live demo: https://jakedeichert.github.io/wasm-astar/
Golang produces one single binary you can deploy to your target environment and doesn't really require anything else installed.
From what I've read, Crystal generates a binary but you also need to ensure Crystal is installed on your target environment.