Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What simple tools or products are you most proud of making?
526 points by shovel on Nov 15, 2016 | hide | past | favorite | 868 comments
I'm thinking of tiny projects along the lines of single-function tools like domainr. But also game-changing ebooks, newsletters, courses.


(i.e., "iz u ded?")

I made this because I adopted a puppy and realized that, if I got hit by a bus on a Friday, he could be stuck in his crate for days before anyone realized. Morbid, but useful.

It texts you every X days and asks, "u ded?" -- if you don't click "naw" before X days pass, it'll notify your contacts.

It's a portfolio project to show what I've learned in the realm of "serverless" architecture. Details about its construction here: https://medium.com/@marclar/iz-u-ded-713594fd80e9

Google has a similar feature to give trusted people access to your data if you've been inactive for a given amount of time (so probably dead): https://www.google.com/settings/account/inactive

Wow, going through that was a bit emotional. You've got to set up an email that gets sent to your contacts when you've been inactive for >3months. That'll only happen if I'm dead or imprisoned so, yuck. Did not enjoy typing that one up.

Yea, I got to that step and closed out. I need to set aside some time this weekend and think about what to write.

Wow, what a frighteningly effective deadman switch. Normally I'd be worried about forgetting to reset it but in this case it's hard /not/ to use a Google product in a normal day.

That's a fantastic hidden feature - thanks for pointing it out.

Is it safe to put my 1Password's master-password into the message that is sent in case I'm dead?

How about the name of the book on your parents'/friend's bookshelf with your password lists in? Or some clue to a more secure hiding place.

I'd say no. I find an offline alternative to this.

The ability to attach files to the autorespond email is unfortunately arguable both for and against.

If at least one of your friends is technically minded you could probably use yEnc.

My security-mindset-sense is tingling..

Could be an attack vector when you know someone's google usage will be sparse.

"im ded :( plz walk doggie"

Man, that's not how I would want to find out that a friend or family member has passed away.


I don't know, getting that as a final joke from the right friend or younger family member might be my favorite way to be informed, and then I'd go walk their dog. I'd still be sad, of course, but there's really no good way to be informed of this. In all likely hood, I'd already be informed, and then I'd get this half-assed reminder and be all "oh my god, it's so like them!"

Actually when considering likelihood, they're probably on vacation and forgot to pause the program. A better message might be along the lines of: "Hi this is Sean's personal assistant script: I can't confirm that his puppy has been getting walked would you check into that for me? Spare key is..."

I agree in part, but I think that if you are setting up such a message, it's important that you inform your friends and family of the message while you are still alive, and probably you should also tell them that the message might end up getting sent while you are still alive because you forgot or for some other reason didn't get around to confirming that you are alive still in time.

Right -- the message is customizable, and after you save your contacts, it prompts you with a message you can text them to let them know about the service.

Yeah, you customize your own message -- write whatever you'd want to send, e.g. the location of a spare key.

well but it's funny enough not to cause much harm on a false alarm, while still triggering research in to the doggie/death situation :)

Also, the message is customizable. I'm kind of surprised at how many commenters didn't assume it would be, so I'll need to think about how to change the presentation.

Oh, it's all customizable. You write whatever you want, like "I haven't checked in in a day -- please make sure I'm alright."

right? How horrible...

You can set the message to whatever you want; the message in the screenshots is just in keeping with the overall tone of the site.

Appears that the site would refuse to show up.

  Your ad blocker may prevent this site from working. Please
  disable it to continue.

Can you make a version of this that just texts my mom that "I'm okay". That'd be perfect.

P.S: Yes I'm thirty. Y'all don't know Indian moms.

I'm over thirty. This isn't Indian specific...

Also over 30, starting to want them to send me messages that they're ok.

You could write a cron job that uses Twilio. I like to optimise for success.

"- Text me when you arrive"

5 minutes later..

"- I arrived. No assassins encountered."

But mum, look, if anything has happened you'll get a bloody phone call. With this system my not texting just primes you to worry more, despite the far higher likelihood that I forgot than that I'm dead.

Literally the best result is that you start worrying I'm not ok a few hours before finding out for certain that I'm not. So let's assume success, and agree that in case of failure you're going to have a very bad day anyway and this doesn't really help mitigate anything at all.

(this does not work)

It never works.

Oh, I know. I know. I'll be damned if it's going to stop me trying though...

Kudos for friendly easy-going presentation and sleek implementation, enjoyed checking it out. Would’ve signed up were I in the market!

> "were I in the market"

> the market of dying

is there something about your mortality that you'd like to tell us?

I don’t have a dog.

Your post just made my morning :)

I genuinely laughed out loud at this in my office, thanks for making my day of copy changes better @goblin89

Thanks! Much appreciated :)

"The workaround is to POST directly from the browser to an S3 bucket and then handle that AWS event with a Lambda. "

Great article and nice project. Do you upload an "event" to a queue type folder on S3? what triggers the Lambda function after the file upload?

S3 has built-in functionality to trigger a Lambda function when certain events occur (e.g., object creation). For example, see http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.....

Thanks so much :)

As @jdale27 said, there's built-in functionality with AWS that lets you subscribe to various events, e.g. S3 uploads, CloudWatch logs, etc.

Have you ever had any false alarms with this?

I have not!

Is it weird that I'm quite interested to final out how many "messages to contacts" have been sent out so far? :P

After the final one hour warning, it should call you and if you pick up, the alarm cancels. So a final step that's not passive and only requires picking up the phone instead of opening the texting app and clicking a link. Also helps if you're somewhere where you have SMS/calling but no data. Although in that case, being able to reply "I no ded" would be more reliable.

In which case your murderer answers the call.

Would it be much harder to process a tone-based password prompt?

So you receive a call and it just beeps on says "enter passcode" and you enter the code. Though to be honest it's highly unlikely that will the hypothetical murderer would pick up a phone call unless they were expecting it...

Interesting idea -- thanks for the suggestion

This is fantastic, made me laugh. Brilliant idea

Haha -- thanks, Dave -- glad you like it :)

really like the clean design of the front-end, did you use anything special to create it?

Looks like Semantic UI.


Indeed, as @axlee said, Semantic UI. Highly recommended.

If I iz ded and I selected 17 days, my dog is ded to.

You should do a Show HN for this.

Thanks! I'll try to get something together next week.

next week: looks like mk4p hasn't showed up... time for somebody to break in and feed his puppy?

Are the SMS being sent from Lambda or another service like Twilio?

There's a scheduled Lambda that sends messages via Twilio.

Nice! But what if I lose my mobile phone or change my number? :D

Wellll, you could set it to check every 1-30 days, so maybe set it to check less frequently?

Wouldn't solve the changing-your-number thing, but I'm guessing you don't do that too often.

first world problems :)


I have migrated my wife's (then girlfriend) computer to Linux and sometimes I had to configure something on her computer (e.g. a printer). This ended up generating lots of back and forth on the phone with me telling her commands to write in the terminal, and she reading the output out loud. I wanted an easy way to see her terminal. So shellshare was born.

Shellshare allows you to run a single command line and share your terminal online (read-only)

    wget -qO shellshare http://get.shellshare.net && python shellshare
That'll give you an URL others can join and watch your terminal live. No sessions, no recordings, and the data is deleted every day.

There aren't many users, but I use it almost every week.

wget -qO shellshare http://get.shellshare.net && python shellshare

Please don't tell people to do this. This is an idiom called "curl pipe sh"; you're asking people to run whatever code someone on their network decides to send them.

As an absolute minimum, you should change that http to https, so that they're merely running whatever code YOU decide to send them; but even that doesn't quite fit with the "share your terminal (read-only)" philosophy...

I agree with the HTTPS part, but aside from that I can't really see how it's less safe than saying "here, install this .deb (which gets to run scripts as root) and then run the binary inside".

deb packages distributed to the public should be pgp signed and in a proper repository. It doesn't help people who will just force-install it anyway, but if they care it allows verification.

Both require trusting others, how is this any different?

Out of band verification. When you're doing curl pipe sh, you're trusting the host and that's it. With packages, you can verify the trust against external services like keybase, check website archive for changed key ids, check signatures on the public key if the author is into things like web of trust.

It won't protect you against someone being directly malicious, but it will against MitM, website hacks, etc. It also establishes semi-permanent trust on first use.

>Out of band verification. When you're doing curl pipe sh, you're trusting the host and that's it. With packages, you can verify the trust against external services like keybase, check website archive for changed key ids, check signatures on the public key if the author is into things like web of trust.

Your grandma is pretty advanced.

> Your grandma is pretty advanced.

Grandma level: Grace Hopper.

Who said anything about grandmas. The topic was "what's better than curl pipe sh". The target crowd knows how to use the terminal.

But if the software is already installed, trusted package author also allows secure updates.

Totally agree on the HTTPS. Wanted to change it for a while but life kept on the way. Changed it now, it's live on https://get.shellshare.net.

I also agree on the bad sides of the "curl pipe sh" pattern. Ideally, that command would be "apt-get install shellshare && shellshare", but haven't been able to write packages for it yet. There're 2 open issues about this: https://github.com/vitorbaptista/shellshare/issues/28 and https://github.com/vitorbaptista/shellshare/issues/31, if you or anyone else have some time to contribute.

What's a better alternative?

You could use hashpipe (https://github.com/jbenet/hashpipe), from Juan Benet (the author of IPFS). It simply checks that the input to the command matches a given hash, so you can do `curl <url> | hashpipe <hash> | sh`, and if the output of the curl command is different than expected it won't be passed in to `sh`.

Ironically the prebuilt binaries of hashpipe itself are provided without means of verification :I

So if you are going to use hashpipe, I think you should download it in source form, read it -- it's under 100 SLOC -- and then build it from source yourself. This way, you do that once and then in the future provided that you trust those sending you various scripts and binaries and the channel they used to provide the hash, all is well and no further manual verification is needed on your side of things ever again for any of those.

If an attacker can modify the output of the curl command (on the host or on the wire), cannot they also modify the value of the hash seen and copy-pasted by the end-user? I must be missing something...

As viraptor said, putting code into a public repository (e.g., debian packages); that way there should be a paper trail if the code is modified.

Beyond that, there's a simple matter of advertising: "Share your terminal (read-only)" may mislead some people about what is happening. A more accurate description would be "Give us control of your terminal (we promise we'll only let other people read it, not write anything)".

Imagine if this principle were applied to other software products. "Click here to download the Office installer, which will gain full admin-level access to your machine. We promise to only use that to install Office."

That would be awesome. Users might start to understand security.

Users don't read.

As usual, you can never be sure unless you read the code, luckily, it's very small: https://github.com/vitorbaptista/shellshare/blob/master/publ...

The only thing sent to shellshare's servers is the text in your bash terminal. There's no return channel for the servers to send commands back to the computer.

You could argue that you're giving control of the terminal because you're running a third-party executable, but that's the same for any executable you run.

Download it, audit the code, and then do python shellshare

> Download it, audit the code

Applies to your operating system as well, plus any firmware.

Boring, you need to live on the wild side a bit more :D

Wow, that's pretty cool. I've thought about moving my parents to Linux; my mom only uses the internet, and while my dad needs his computer for work, the software he uses supports Linux. I'm afraid I'm not going to be able to support Windows for them for much longer. I use Linux full time, and Windows is slowly changing. I can still talk them through most problems over the phone, but little changes here and there have made walking them through an issue really time consuming, which is frustrating for all of us.

My chief concern with installing Linux was having to teach them how to communicate what is happening over the phone all over again. Outside of that, I'm pretty confident Linux is a good choice for my parents. My dad actually worked for Digital Electronics for years, and he's been interested in Linux for as long as I've been using it, but I think Linux would actually be better for my mom, because she literally doesn't care about her computer as long as it works. Her computer issues are generally the "the computer keeps telling me something and I want it to go away" type. Fixing those problems on the phone with Windows is a mess, but are basically trivial in Linux. My dad's issues are generally "I broke the internet," so this wouldn't be as helpful for him.

I'm really excited about this. I might honestly go buy an SSD to install Linux on my Mom's computer today. That way I could just drop it in her computer next time I'm at her house. My hope is that the boost in speed from Windows---> Linux, and the boost in speed from a 5400 rpm drive --> SSD would keep her happy long enough to get used to Linux. She's been complaining a lot about speed recently, and last time I was there I discovered she managed to her default user folder from the internal drive to an external USB backup drive. I have no idea how she did this, but it means she keeps running out of space because the backup process now backs up the backup drive recursively.

Have you ever considered installing remote screensharing software rather then having to troubleshoot over the phone? That's how I help out my parents.

Yeah, I've used it at times. It's great when it works, but getting remote desktop working is always a bigger pain than just trying to explain the problem over the phone. The individual issues aren't that big, but it means a 20 minute phone call turns in to a 1 hour phone call because we spend 20 minutes trying to get screen sharing working.

For one thing, I'm generally away from my computer when they call me, and all I have is my phone. If that isn't an issue, then port forwarding is an issue, or the desktop sharing they have on their computer is out of date, or they only have RDC, and I can't find a Windows computer. Sharing the desktop via chrome works pretty well, it still can be an exercise in frustration. For instance, my dad is a trader, and has 8 monitors. Getting him to share the correct screens takes forever. (I don't know how Windows decides where to open a window, but it seems like it tries to find a monitor my dad isn't looking at and opening it behind a window marked stay-on-top.)

I might use it if the problem was extremely urgent and extremely complicated, but I live about 30 minutes from them, so I'd just head over to their house if it was that bad. Screen sharing software was just one more thing to go wrong on their computers. This way, I don't have to worry about whether they have a version with a critical vulnerability, or if they'll fall for a social engineering attack and click on a teamviewer invite.

This software solves my concern about not being able to see what the hell my parents are doing when I'm telling them shell commands. This makes it really easy. They'd already be using Linux if I knew I'd always be able to use desktop sharing to look at their computer, and port forwarding/security/etc wasn't a concern, because connecting to a remote X server is incredibly easy. I already fix internet issues by SSHing in to the router (with key-based authentication) and then connecting to whatever piece of hardware needs to be tinkered with. I could probably do the same thing for an actual desktop, but I've fixed misbehaving servers via ssh on my phone before, and typing commands on a phone keyboard is an exercise in frustration.

In any case, I sat down with my dad and created a clean image of his desktop a while back. When he really messes something up he just reimages his computer. He likes the fact that I gave him the ability to bring his computer back from the dead himself. All his files are installed on a separate disk, which is constantly backed up, so he never loses more than about 20 minutes of work.

> getting remote desktop working is always a bigger pain

Easy as cake with TeamViewer

>Screen sharing software was just one more thing to go wrong on their computers. This way, I don't have to worry about whether they have a version with a critical vulnerability, or if they'll fall for a social engineering attack and click on a teamviewer invite.

You can lock down Teamviewer pretty tight, including a whitelist that allows only you to log in.

It's no more of a risk really with TeamViewer installed. An attacker can use gotomypc or similar or just send a TeamViewer invite binary (or link to download it and give the attacker access).

Wasn't there some story a few months back about TeamViewer accounts being hacked in some unknown way and their access used to infect machines? Was that ever clearly resolved? (I remember speculation of TeamViewer themselves being compromised, or just a massive password-reuse attack, or ...)

It's never been clearly resolved, but also hasn't developed. So far it looks like TV was correct and the breaches were the result of password reuse from other sites who did have passwords compromised.

I suggested this in a recent similar thread: if this is a desktop, you could switch to an entry-level server motherboard with IPMI.

Then run the IPMI cable to OpenVPN on (eg) an RPi or even directly on the router.

You can configure and soak-test the router/RPi/etc locally, and IPMI is OOB.

Using an RPi/similar has some nice properties: you could VNC to that and then go from there to the IPMI console, and also recovery images stored directly on the RPi would upload quickly etc.

Thanks! Glad you found it useful. I hope the transition to Linux goes well for your parents.

I like https://tmate.io/ for this. It also has a read-write option. :-)

This is another great option, with much more features than shellshare. At the time I started working on shellshare, it only allowed read/write sessions, so I wrote it anyway.

I like that it only allows watching, not interacting; that makes the security implications of someone obtaining the URL much less serious.

Can the same effect be achieved via GNU screen (potentially combined with an SSH tunnel)?

http://hamvocke.com/blog/remote-pair-programming-with-tmux/ it describes tmux setup, but screen can do it as well - there are guides online.

What a great way to create huge amounts of IT maintenance work for yourself.

How so?

Linux tends to require configuration/debugging from the console. Don't get me wrong, I use linux every day, but I would never push it on someone who is not interested in solving their own tech problems.

If it's setup and working it requires no configuration/debugging. And it sounds like whether it's windows or linux he's going to be responsible for fixing any computer problems so it may as well be on a platform less prone to problems that he can fix better.

Just being on a platform where uses can't get infected with malware from stupid flash game sites cuts out 90% of maintenance.

Why not just SSH + shared screen / tmux? Not sure why you need to involve the browser.

Incoming SSH connections can/should be blocked by the router. There is also likely to be no static IP.

Connect them to a private zerotier network (https://www.zerotier.com/#try_zerotier) it's free and you can bind sshd just to the zt0 interface. Instant access from anywhere.

Sounds like yet another hosted/subscription based service.

You can use your own server if you prefer. Otherwise it's hosted. No subscription needed if you're not using massive networks.

That sounds a lot harder than solving the original problem.

I may be biased, but I put zerotier on lots of hosts these days. Whether it's home raspberrypi for remote access, or vps to get all administration off the public network, or sometimes just as a VPN replacement for stuff like replication. It's pretty much fire and forget.

You can install TOR on the machine and use it for NAT traversal, by making SSH available through a hidden service. Latency is a bit high but it's easy to set up and connect to.

This is great. Thanks for creating and sharing. I've made sure to bookmark it.

this is brilliant, and very useful. Well done!

Thank you for this one :)

this is cooool. :)

why would you do that to your poor wife


I am very, very proud of the (very simple) platform that we've built there. It's a basic tool that "just works" - and just works exactly like you'd expect it to.

If I were a consumer of cloud storage, this is what I would want it to look like.

It pleases me so greatly to know that, right now, someone is doing something like this:

  pg_dump -U postgres db | ssh user@rsync.net "dd of=db_dump"
... while simultaneously, someone else is doing this:

  zfs send tank/test@snap1 | ssh user@rsync.net zfs receive -s tank/test
It's been 15 years now since we started providing this service - almost 11 since we branded it rsync.net - and the first warrant canary is now 10 years old. This appears to be, for now, my lifes work.

I have used rsync.net at work in the past, and the service and support is the best I have experienced in any commercial service, period. Good job.

On the other hand, we need a word about that scrolljacking on your homepage...

+1 for scrolljacking. It would randomly pick a direction independent of my actual scroll direction.

Holy moley that scrolljacking

Scrolling is very annoying.

I've used rsync.net personally and commercially. Thanks so much for building a great, simple tool and also caring about user privacy with the warrant canary and stuff.

Your website is unreadable on iOS chrome

Started with http://rsync.net/products/aws.html but all of them linked at the top are unreadable


Aaah, what happened to your old site? It literally takes 10 seconds minimum from the screwed up JavaScript scrolling to reach the bottom of the site.

I'm sure this converts better, but at the same time the site design and stock photos screams newish SaaS service that could disappear on me tomorrow. (I know better, it's just the impression I get)

Yes, we're scrapping this design and going back to a more "bettermotherfuckingwebsite" inspired design ... will happen shortly ...

I've only heard good things about rsync.net (though never had the chance to use it). Thanks.

Is there a blog posting or use case description for using it as a personal photos and videos backup solution? Something along the lines of best practices, approximate cost, any additional desktop tooling, etc.?

Can I use rsync.net to backup my (selected) laptop files to my local-network linux server? (I'm currently doing this with CrashPlan but I don't like that the backup destination has the files in some proprietary format).

If so, I would love to be a customer.


I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.

rsync.net is a cloud service that provides a remote filesystem and ssh access. How do you envision using a remote storage provider to backup your laptop to your local server?

By using the cloud service to manage data transfer from one computer to the other, even if they are behind NAT, have changing IP addresses, ...? You know, just like CrashPlan, which otherwise also provides remote storage, does?

(rsync.net doesn't offer that, but it is not a totally outlandish idea that they could if you just know them as "cloud backup services")

> (rsync.net doesn't offer that, but it is not a totally outlandish idea that they could if you just know them as "cloud backup services")

Ah, if that is what you wanted to do, they don't need to offer anything more than they already do. There's no reason why you can't rsync your laptop to rsync.net and then rsync the fs on rsync.net back to your local server.

Yeah, exactly as detaro says.

I usually like to keep most of my stuff backed up and that's almost 1 TB of data which would be very expensive to keep in the cloud.

So what I did was build a very cheap server with a WD Red HDD that I use to backup my full drive every couple of months.

I know I can probably use vanilla rsync but I really don't have the time to set up everything up and make sure it works, so I thought rsync.net could be a potential solution/alternative to CrashPlan.

Thanks for the answers though!

Yeah, the thing is rsync.net is just vanilla rsync. Solves the proprietary format issue, but not the 'some assembly required' issue.

Then you have to pay for the capacity to store a copy in the cloud. Fine for small sizes, annoying if it is terabytes of stuff ;)

How does this compare to, say s3?

At 14 Cents Per GB / Month, rsync.net costs me ~$1720 per year for 1TB (14 * 1024 * 12 / 100).

S3 at 3 Cents Per GB / Month clocks in at ~$368 per year for 1TB (3 * 1024 * 12 / 100). Let's say I'm using a lot of transfer, so I'm going to double the price to ~$720 per year.

Still, rsync.net costs me $1000 more per year. Convince me :).


This is already addressed on the site.

As always, email[1] us to ask about the HN readers' discount, which is significant.

[1] info@rsync.net

Am I missing it or is there no Company/About page on your website? There's an obvious difference between rsync'ing to Chinese/Russian and US/European clouds, so knowing where the company is and who's behind it is pretty much a must.

> There's an obvious difference between rsync'ing to Chinese/Russian and US/European clouds

Apart from latency, is there a difference? Would you upload your unencrypted data for long term storage to anyone?

Very happy user here. I'm thrilled that rsync.net supports git, and the service has been absolutely rock solid.

I can't browse your website on safari mobile without it page refreshing when I attempt to scroll.


I created this favicon generator a few weeks ago to generate minimal favicons for my side projects. I'm not good with design tools so it saves me time when I start a new project and want a simple favicon in ICO format.

I'm proud of it because it's server-less. I generate the multi-BMP ICO file in binary using ArrayBuffers and Typed Arrays in JavaScript. I use a <canvas> element to create the images/design.

It's not very polished and I'm sure there are bugs, but feedback would be appreciated!

Cool. I like the fact that the icon shows in the actual tab as a preview. I guess what is missing is the option to select a font?


I'm thinking about adding some of the Google web fonts.

Also, there's a neat technique to make the text color either black or white depending on what has more contrast against the background color.


Nice! I'm definitely going to use this. The text is barely visible on a lot of the lighter colors right now.

What is this magic?

I didn't check the source, but rendering the <canvas> to a data URL, and using something like this [0] would work.

[0]: http://stackoverflow.com/questions/5199902/isnt-it-silly-tha...

Yep, this is the strategy that I'm using. I export the canvas to data URL and place the data URL in the href attribute of the favicon <link>. I'm not sure if this works in every browser though.

oh cool! That's way better than trying to be a pixel artist in http://www.favicon.cc/ :D

I solved a similar problem--- I was tired of websites that didn't provide favicons. So I have a chrome extension that hashes the domain and fetches a gravatar icon for it. https://chrome.google.com/webstore/detail/replace-missing-fa...

It's sad when you bookmark a website and there's no favicon... I'll have to try your extension.

Just tried it out and the file size is huge (350KB).

Right now I'm adding many different image sizes in the ICO file to cover many types of browsers and devices, but it's probably not a good default. I will expose sizing options or default to fewer sizes in the future.

Thanks for feedback!

Nice. I like that it's all client side and it's perfect when I just need the minimum necessary for an example project or starter template.

Hey, I used that a few weeks ago for a personal website. Thanks for making that!

Just used it for a placeholder icon for a new project. Thanks!

No problem!

This is great. I just immediately used it for my nascent blog.

Awesome, let me know if you have any problems with it!

You can use

<input type=color>

to make color selection more flexible.

I literary need this right now. THANKS! Other tools are too over-thought( lets you draw your own icon ). I needed something simple.

Two years ago I created a CLI tool called pgcli (http://pgcli.com). A postgres client with auto-completion. It became ridiculously successful. I got a few requests to support mysql. So I launched a kickstarter to write mycli (http://mycli.net). This also became quite successful.

There is a thriving community of core devs and a ton of users. I'm happy with both creations and made a lot of online friends.

These projects also led me to create a standalone python library for doing fuzzy matching. I'm quite proud of this one since the resulting code ended up being ridiculously small but produced really good results. https://github.com/amjith/fuzzyfinder/


I can't remember who turned me onto pgcli, but I've been telling everyone I can about it for a long time now. It's wonderful.

Thank you!

Thank you for spreading the love. :)

The initial surge of users came from HN when I originally posted it at launch, but since then most of the users were through word of mouth.

This is why i read threads like these. Thank you!


I work in security and have a paranoia of shortened links (bit.ly, t.co). I got frustrated with the options out there that forced me to right click every shortened link or paste it into a site so I made this Chrome extension / web app. It is pretty simple and keeps a list of 300+ shortened link services to check against. If your browser ever visits one it redirects you to the site to expand the link. It will also hit the Google Safebrowsing API to see if it is known to be malware plus will strip out tracking cookies.

It's been fun and rewarding watching my little extension grow to global use of over 4k users.

Does anyone know of a Firefox equivalent of this extension?

No, but you can use Chrome Store Foxified to install most Chrome extensions in Firefox.


That's pretty neat!

It's in the works!

Relevant PSA to file away:

http://goo.gl/zxcvb2+ (toy link, doesn't work)

Note the + at the end: it gives you a detailed statistics page that also tells you what the URL points to.

(NB, the stats come from JSON that seems easy to fetch; ratelimiting/"that's not a browser"-checking untested.)

This is a great tip. I had no idea this existed.

Does it warn you if someone sends you a link designed to log your IP address and browser? e.g. one generated on http://grabify.link

It'll expand a goo.gl link which would then display the Grabify link. The extension does not support Grabify but will certainly be adding it. I'm not a fan at all of these IP trackers.

This is something I have been looking for, thank you!


I'm proud of many things :(

* I converted a rotary phone into a cellphone: https://www.youtube.com/watch?v=fSkdWQswpc8

* I wrote a personal bookmark search engine: http://historio.us/

* A site that talks to spammers so you don't have to: https://spa.mnesty.com/

* A pastebin: http://pastery.net/

* A remote-controlled GSM irrigation controller for farmers: https://gitlab.com/stavros/irrigation-controller

* A button that orders food when pressed: https://www.stavros.io/posts/emergency-food-button/

* A python library and cli utility for controlling YeeLight RGB LED bulbs (a cheaper and nicer version of Hue bulbs) that I wrote this weekend: https://yeelight.readthedocs.io/en/latest/

* A secure communications library for IoT devices: http://stringphone.readthedocs.org/

* I took some non-terrible photos and made a site for them: http://portfolio.stavros.io/

* A hardware library for the A6 GSM modem: https://github.com/skorokithakis/A6lib

* Expounder, a better way to explain things in text: http://skorokithakis.github.io/expounder

* Dead man's switch, a website to email people after you die: https://www.deadmansswitch.net/

* I can't even remember the rest.

I like expounder, definitely haven't seen something like that before. I'd like it if there was an option to have the expanded text highligted in some way, just so I can keep track of everything mentally.

Having it reversible would be nice, too. Knowing the click is irreversible gives an uneasy feeling.

There is an option, it's detailed in the docs. I don't like it on by default, but some people (like you) do, so I added it.

Spamnesty is really amusing! It would be even better if your bot had a wider variety of responses.

I foresee that sooner or later, your bot will get stuck in an endless conversation with a spambot which keeps replying, leading to another round of replies and then another...

"Greetings from the International Journal of Swarm Intelligence and Evolutionary Computation"

Well, that's fitting...

Haha, this already happened, I think the 22 response one was a bot. I have a ~8 hour delay before I stop it, so luckily I noticed it and deleted one of my responses.

Wow. so many things. Please consider taking time to write about how you are able to be so much productive. Just Curious, how old are you ?

I'm 33. I don't think there's much of a secret in productivity, I just like these things so much that I prioritize them over other things.

Spamnesty is nothing short of amazing! :)

I hope you'll also distribute the code so hopefully anyone not necessary trusting your service to not harvest email addresses or resell them (or get hacked) would be able to deploy that on a custom server.

In any case, was very fun to read.

Actually I just noticed that your repo is available. Awesome!

Yep! Feel free to issue merge requests for features!

> Dead man's switch, a website to email people after you die:

Whats your thoughts and learnings on this one... it seems dark to me.. but i might be completely wrong..

It's pretty dark, but what can you do? You won't avoid death by avoiding thinking about it.

I'm using historio.us for three years now, it's great. Thanks for that :)

Thank you, I'm glad you like it!

Those photos are absolutely stunning.

Thank you, I'm a novice so I'm kind of insecure about them, so your kind words mean a lot to me.

That's a great body of work!

Thank you, the face isn't too bad either!

that Dead mans switch type of project is only funny when you want others to use it.

That idea alone should make us reflect if we had lived a life being true to ourselves and told everyone what we wanted them to hear.

OK, next its my turn: Ill create a dating bot that contacts users on Valentines day, and invites them to restaurant if they will still be single next year. How does it feel ?

I can't tell what point you're trying to make here.

And how exactly does your dating example work? It invites them only if they agree to stay single for a year?

I think parent assumes users send their confessions and sins to people after they die instead of clearing things up beforehand or living an honest life. Says more about himself/herself than the product IMHO.

Nyan Mode.


I made it as a simple joke, but for some reason it rapidly gained popularity among Emacs users, and now I sometimes find it or hear about it in unexpected places.

(Also I fear that on my deathbed I'll look back and realize that the most used thing I've ever made in my life was an animated cat for a text editor... sigh)

I have been using this for years and all my work colleagues always ask me "what is that nyan cat on your text editor? that must be super annoying!" and I always have to tell them I just really like it.

Thank you for building this, it's awesome!

Same! But sadly when I switched to Spacemacs I haven't set it up again.


Scroll down for nyan mode, if you don't mind using an external package. :)

Use the colors layer and enable the Nyan cat option. ;)

You're welcome! :).

Found it through Spacemacs. Totally love it. Even if it were to be your most used creation, it totally deserves it.


I started working with VMs several years ago, manually setting up a Virtualbox image. It would take around 30 minutes, and whenever I'd screw something up I'd have to delete it and redo the whole thing. Sometimes I'd fat-finger a command and have to start the process all over again.

Once I got tired of that I started to look into Vagrant, which recommended using a tool like Puppet or Chef. That led me down the rabbit hole of learning Puppet, which made me want to have a GUI to be able to easily change some choices around without having to mess with the code itself.

So I created a simple HTML form with drop downs and buttons and released it thinking that maybe 10 people or so would find it useful.

Almost 4,000,000 servers created later, and I'm quite happy with how it's been received!

Great tool! Made it much easier for me to get started with puppet & vagrant

I use this frequently at work! :D

The simple tool I'm most proud of is spiped. If you have two systems which need to be able to talk over TCP without worrying about evilness on the network between them, spiped is the answer.

The simple tool which has probably had the largest impact is bsdiff -- now found used in hundreds of millions of devices -- but I'm not particularly proud of it because it was a quick hack and horrible code written by a C novice.

The non-simple product which I'm most proud of is Tarsnap, of course; I've spent a decade of my life on it, and don't expect to stop any time soon.


Ludicrously simple but I rely on it and use it every single day for Dev (and real) purposes

<3 single purpose apps

edit the app I use for HN (MiniHack) seems to have mistakenly replied to the first reply instead of the root

Sorry for comment sniping!

> The simple tool which has probably had the largest impact is bsdiff -- now found used in hundreds of millions of devices

In your thesis, you mention an updated algorithm that produces smaller patches. Do you have any code available that implements that algorithm?

Some of that, and some further improvements, made their way into https://github.com/cperciva/bsdiff . But I don't think anyone is using that new code; the company which was paying for me to work on it decided not to continue with that project before I had a chance to finish polishing the work.

That reminds me, I keep meaning to look into seeing how hard it would be to add a reverse mode to spiped.

Right now it acts like a ssh -L tunnel, but doesn't have a mode where it acts like ssh -R, right?

Those are really the same thing, considering that you run a copy of spiped on each side.

Oh? Maybe it's just that the documentation specifically mentions ssh -L but not ssh -R. Can you do something like run spiped on a machine behind NAT or on a dynamic ip address to create a reverse tunnel via a publicly reachable host?

Well, spiped lets you say "when connections arrive here, encrypt/decrypt them and send them over there". But if "over there" is behind a NAT, there's no way to do that; you would need a persistent connection, which is what ssh does and what spiped is designed to avoid.

thank you for spiped. Surprised at how often I find myself using it

I built https://cronitor.io after having an important cron job fail silently for several days. When I mentioned this problem to a friend his first response was "we just had a major issue with cron failing silently at my work too".

We decided to hack on it together, and we've since grown Cronitor from a tool built for our own needs into a small business with a couple hundred paying customers.

As someone about to write a cron job, what ways do you see Cron fail?

My assumption is that cron is robust and reliable, it's the job script itself that may fail silently and need monitoring, yes?

Yeah, I'd say your assumption is correct. However, other common ways that I've seen cron "fail" is for the cron entry to being installed in the wrong user's crontab, the permissions on a script changing such that it can't be executed, temporarily disabling or removing a cron job and forgetting to re-enable it, etc.

My favorite is forgetting a newline at the end of the crontab. I always put a warning at the bottom of my crontabs.

# Always end with a newline!

The most common failure I've seen is when people forget to use full paths in cron.

bash instead of /bin/bash (or similar)

There's other weirdness in cron-land too. Cron will completely ignore files containing "." .

The cron process can be killed by the oom_killer, resulting in missed crons. This may be aggrevated If the cron service is never respawned later.

I found where I used to work that cron jobs usually failed because they weren't adequately tested, so I tried using MAILTO but it didn't do what I wanted, so started putting something like (it's been a while):

45 5 * * * /bin/bash -eux -C /path/to/real/cmd >> /var/log/somefile 2&>1 | mail -S "/path/to/real/cmd... at failed with details in /var/log/somefile" to-address < tail /var/log/somefile

...then test failures to make sure the email and everything worked as expected (like, mail might not be set up correctly on the box by default). And either overwrite /var/log/somefile with ">" instead of ">>" or use logrotate. Of course, the /path/to/real/cmd script, if a shell script, should have something like "set -eux" or at least "set -e" at the top (and be well tested), otherwise it won't always report failures and this has no chance of working.

I didn't (in mild use) see unreported failures after that, and it was really handy for problem diagnoses when something did go wrong thereafter.

But after any change I had to test carefully again every failure mode etc, because it seemed so easy to miss something that causes unexpected behavior. Maybe even had to wrap it in an "if" statement (single-line), "..else mail...".

It would be fun but time-consuming to automate those tests, maybe with shunit2 (or something named roughly like that), to rerun periodically and make sure ops didn't change the mail config to break this setup, or something.

I know that looks awful but I enjoyed it. It might just be easier to use your replacement. How did you advertise?

In case anyone ever reads that, too late for me to edit but: file 2&>1 | mail -S ...should be: file 2&>1 || mail -S ...or more likely the wrapped "if" mentioned.

also https://wdt.io/cron-monitoring.html , I think it's been awhile for awhile.

A personal knowledge organizer at http://onemodel.org/ (AGPL). Highly efficient at managing lists; like an org-mode that uses postgres and is more efficient and flexible in some ways. I use it heavily, daily, to manage checklists/tasks and notes on many subjects. No mobile or mouse support currently, but about everything one needs to know is on the screen at any given time. It's something like really fast mind maps but (currently) keyboard-driven and handles very large amounts of interlinked data. Data can be somewhat structured, as there is a feature that lets you clone then modify template entities.

I see it as the beginning of a platform to change how individuals (or mankind) manage knowledge overall. I'm now working on exploiting the internals for collaboration (linking instances, sharing data, subscribing to each others' data, mobile, etc).

For current org-mode or evernote users: The app has export (& finicky import) features to convert anything to (or from) an indented plain-text outline. The FAQs have links to a discussion of a more detailed comparison with org-mode that seemed somewhat well-received at the time (the link is on this page which also discusses evernote: http://onemodel.org/1/e-9223372036854614741.html ).

Feedback or participation are appreciated. If one has any interest at all, I suggest signing up for the (~monthly?) announcements list at least. More details are at the web site, including some FAQs.

https://transfer.sh which I built because I needed it myself, now being used by hundred thousands of people a month and http://slackarchive.io used by 500 slack teams.

transfer.sh is easily one of the best file-sharing website I've used.

when I recommend it to others, they find it _counter-intuitive_ to use, maybe because of them not being comfortable with the command line. now it has a drag/drop interface, so, that's _good_ (i guess).

one "issue" that I do have with it, is that downloads aren't resumable/pause-able or you can't see actual download progress. Is this a limitation or was it built that way ?

thanks for making such awesome things :)

(for those reading, transfer.sh is fully open sourced here: https://github.com/dutchcoders/transfer.sh )

Not sure the code is production ready, but similarly, dro.pm is a small thingy that has a command line option to share files. The links expire automatically so there's no abuse headache and it allows links to be single characters most of the time (eg. dro.pm/v).

You can even edit links afterwards, for example to remove content you know the other person already opened.

Additionally to files, it also dupes as a URL shortener and as pastebin if you paste text.

http://www.averageweather.io/ - tool to make planning for travel much easier. When you are too far out for a forecast, I found myself taking too many clicks to get average weather data.

EDIT - Whoa. Getting lots of traffic. This site is like 3 days old and I taught myself python and django to build it. Open to any recommendations at jonathan at averageweather dot io

EDIT 2 - Back up... Site crash ... Google apps shutdown smtmp connections which crashed my entire site.

I would use it if it was in Celsius.

Noted! Will work on that asap.

I wanted to let you know that I've added a button for Celsius.

Excellent work! I have been traveling down the East Coast for the past month and found all the similar solutions for this problem very clunky. So happy you posted this!

Thanks, I appreciate it.

Looks like San Francisco will drop to 0 degrees on the 18th!! http://www.averageweather.io/averages/San%20Francisco/Califo...

Bundle up! Let me look into that ... Thanks

Nice website!

Some urls are weird though. You have a trailing / somewhere I guess.


Thanks ... I've been seeing those on google analytics ...

Support for entering postal codes would be really nice. :)

Also it would be nice to per-populate the date field to today's date.

This is really cool, would it be possible you add a toggle somewhere for Celsius degrees?

Thanks! I definitely will. Hopefully today. Very common, understandable request. I only launched it a few days ago. Definitely has things I want to improve.

Also I've used Google's Places Autocomplete before for something similar to the city selection, it gives you a dropdown with possible locations.

Wanted to let you know that I have added a Celsius button.

Great project. Especially launching from 0.

Have you considered adding a Celcius option for us quirky Europeans?

For us in the rest of the world...

I know I know ... Sorry

Don't worry, it's a nice problem to have. Having users around the globe is something you should be proud of.


Well ... assuming traffic doesn't die post Hacker News fame ;)

Thank you. After I switch to Google Places Autocomplete, celsius is next.

looks nice - would be handy if it was in celcius too (and if it showed avg rain %)

Thanks. Agreed. Will add celsius. Rain % displays when the data is there. Otherwise I don't show it. Maybe I should show N/A or something ...

Just added Celsius.

Where do you get the data?


They have a free API that offers that kind of stuff?

not free, but cheap: https://darksky.net/dev/

What he said. Light years cheaper than any similar offering.

this is really cool.

feature suggestions:

* range of dates

* zip code support cleanup


Thanks! Range is something I am trying to figure best how to do. I know how, but it is "expensive" in terms of API calls etc. Like would someone pay for this feature?

Zipcode - Django has a great library so that is a next step for me.

Can you save the DarkSkye data so you never make the same request twice? Over time, you would have data for all places and all days of the year.

this is out of left field but one thing i find myself searching for is sunset/sunrise times in the future, especially when traveling to different latitudes. could be a cool addition if this info is available.

Wolfram alpha has that functionality if you type in a place and a date. Example: "Vancouver BC, december 2, 2016"

Thank you. I believe I can get that ...

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact