Show HN: patchbay.pub – Poor man's ngrok/IFTTT/serverless
patchbay.pub
patchbay.pub
If you're interested in monetizing this:
I would pay a fee for this - say $4/month. The only features I would like at this price:
1. Authentication (-H "Authorization: Bearer <token>" would be good enough) - at the level of the routes. This sounds like what you have done for routes like '/' anyway.
2. A CLI to tell which routes I "own".
3. Persistence of messages on the patchbay server up to some reasonable time limit T so that consumers can replay messages since time T without the publishers being blocked on their side.
I would pay $8 per month if:
1. You hosted consumers (go binaries or docker containers which would accept the body and headers of the HTTP response on the consumer side and do something with it), ran them for me in a loop
2. Guaranteed me some level of isolation for things like API keys, etc. which would be passed to my consumers in some fashion.
Even if it were open source, at these prices, I would buy. Don't want the headache of hosting it myself.
1/2. Why not a private instance for $4/month, accessible only to authenticated requests (unless of course you choose to open up certain routes for GET and/or POST)? Not only does this mean you can use semantic URLs instead of random ones (which helps offset the annoyance of managing API tokens), but you also get a unique domain that you can do things like put behind CloudFlare or another CDN.
3. This is an interesting idea. However, by far the greatest strength of the current implementation is that it has 0 (well ok, very little) explicit state. What's your use case for the semi-persistent producers?
1. It's interesting that you request hosted consumers and not hosted producers (a la for hosting a website). But I see the appeal. It would be nice to be able to set up something like a text notification trigger and not have to worry about it being tied to your own physical machine.
I totally agree about the open source bit. I don't see open source as a threat to a business model here. With something so simple it's going to come down to execution and customer service. As a staunch supporter of self-hosting, after 1 or 2 services it simply becomes too much to manage, unless you enjoy it as a hobby. I just want to get work done without giving my digital self over to the big guys. Even paying others per service doesn't really work, because at 5USD/service (which I paid for a Mastodon instance for a while), it quickly becomes too much money. Part of the inspiration for patchbay was trying to make a dead-simple substrate on top of which I could implement many other things, hopefully saving me some self-hosting trouble.
1/2. I can still make semantic URLs against your service, just with some caveats that they have to be globally unique. I could also proxy over to your domain from mine. Authentication would mean that some random person couldn't just come and POST or GET to my routes so I'm happy. $5/month for a DigitalOcean droplet on which I have to manage the server vs $4/month of using patchbay.pub where all I have to do us GET and POST HTTP requests, the latter wins every time (even though I can run other things on the droplet).
3. Semi-persistence would be great for failures on the consumers or on systems running the consumers. E.g. if I had a Comcast outage, I could still apprise myself of messages published during the outage.
(This last point is also why I would love for you to host my consumers - it also makes it a lot easier for you to make the consumers more reliable.)
Good point about paying for a large number of services - that's why I really like Twilio's pay-as-you-go pricing model. Might be a good one to consider for patchbay, as well - a per message published or consumed cost?
Anyway, really nice job. I think I'm going to use this a bit.
If you want to monitor my usage, I will set an "x-hn-user: zomglings" header on my requests. :)
I don't think that's the greatest strength. I think the greatest strength is how easy it is to get started using it and hooking it to personal tools. Whether it has or doesn't have an internal explicit state is totally irrelevant (to me anyway).
I toyed with this idea at http://dollardeploys.com/ but the feedback I got was "Heroku can do this for free".
POST /.well-known/acme-challenge/huhn2?mime=text%2Fplain
Plugged that one. If anyone thinks of similar holes I should consider, please shoot me an email at info@patchbay.pub. There are a whole new set of security issues that crop up with this sort of system. Definitely be aware of that before using it!
I assume "that one" is posting to /.well-known/.
If I don't see one by EOD I'll have to make - is thing is super cool
https://github.com/patchbay-pub/patchbay-simple-server
Note that this will leak memory since there's no logic for removing old unused channels.
EDIT: also, the current state of the code base is not something I'd be excited about having my name attached to ;)
I love this thing though. So simple but powerful.
It won't stop bad actors from stealing your code and using it but you will stop most corporate actors from touching it (and they are the ones you'd want to pay in the future anyway).
https://github.com/sairam/daata-portal/tree/master/daata-ser...
Secure Scuttlebutt is a P2P pubsub system for sending files, messages (chat/notifications), and everything else you can implement with pubsub-like systems.
I think it's just confusing because of the overlap with:
- Patchbay
- Pub
- Channel
If you're curious about SSB, I've posted a link to your site on the network. You can view that (and other content) here: https://oasis-demo.fraction.io/thread/%25IGLa%2F3NDG3cj5gYOY...
Congratulations for shipping it!
This was from a few years ago - https://github.com/sairam/daata-portal/tree/master/daata-ser...
When people working in ops or with remote CLIs would have a great need for such a tool.
FYI, your domain is blocked by Cisco Umbrella (OpenDNS) as "This site is blocked due to a security threat that was discovered by the Cisco Umbrella security researchers." Not sure why, you might want to contact them.
I don’t think they have much oversight over this stuff.
Seems that this is the relevant documentation: https://support.umbrella.com/hc/en-us/articles/235911828-New...
It would be awesome if someone could figure out a peer-to-peer way to accomplish the same thing. I'm not familiar with it, but I think that might essentially be what Tor hidden services are.
Sending a password:
echo 'hunter2' | openssl bf - | curl -X POST --data-binary @- https://patchbay.pub/mysecretpasswordhandle
Receiving a password: curl --silent https://patchbay.pub/mysecretpasswordhandle | openssl bf -d -
This uses end-to-end encryption (Blowfish cipher) that relies on a shared password.EDIT: But in case it happens again here's an internet archive link: https://web.archive.org/web/20191126170030/https://patchbay....
> curl -F 'data=@test.txt' https://patchbay.pub/test.txt
And on the other computer:
> curl https://patchbay.pub/test.txt
But I'm seeing that the output is being wrapped with "Content-Disposition" and "Content-Type" at the top. I'm no HTTP expert, but is there a way to use your server (or namely, curl) to transfer the file so that it doesn't wrap this info?
curl -X POST --data-binary "@test.txt" https://patchbay.pub/test.txt
The command on the other computer remains the same as what you had curl https://patchbay.pub/test.txt[0] https://www.merriam-webster.com/dictionary/poor%20man%27s
I'm guessing you aren't looking to put this out open source if you're looking to make a product of it, but I'd love to see the implementation.
As it stands now, there's a bit of game theory involved. You can shared a channel publicly, but if even one person doesn't like what you're publishing, they can bring it down. This essentially forces people to keep their channels for private use.
This is also one good use case for charging people for private namespaces/channels.
ls -1 *.mp3 | xargs -P4 -n1 -i ffmpeg -i "{}" "{}.ogg"
(yah the filenames would end up .mp3.ogg, but so does the example...should throw basename in there somewhere)
As for metadata, you might consider multipart/form-data, or just packing it into the query string (obviously depends on how much data you're talking about). Of course you'd probably need to write that in something other than bash.
EDIT: It's pretty easy to send form-data with curl: https://ec.haxx.se/http-multipart.html
# preserve filename for i in a b; do gzip -9 $i; done
# does not preserve filenames while true; done curl $patchbay| mangle | gzip -9 | curl -d@- $patchbay; done
#create the directory structure first
find . -type f -name '*.flac' |ionice -c3 parallel -j1 'mkdir -p $transcodes{//}' &&
#now the encodes
find . -type f -name '*.flac' |ionice -c3 parallel -j4 "ffmpeg -n -v 0 -i {} -c:a libopus -b:a 128k $transcodes{.}.opus"
Note the {.} which would actually only grab the basename.