Show HN: HN Follow – Follow Your Friends on HN (val.town)
The app was built in an experimental style on Val Town. We’re trying to create a new web primitive that you can:
1. write like a function 2. run like a script 3. fork like a repo 4. install like an app
This is our 5th iteration of this same “HN Follow” app. We launched the 3rd version here on Hacker News six months ago[1], but it was very kindly removed from the front page by dang in favor of us launching Val Town itself first, which we did in January[2].
We’re trying to strike the right balance between something you can use and install with one click, and something you can infinitely customize. For example, you could fork `@rodrigoTello.hnFollowApp`[3] and change the input parameter from authors to a generic query, like I do here[4] to get notifications whenever “val town” is mentioned on HN. In addition to emailing myself (via `console.email`), I also send a message to our team’s Discord. The possibilities are endless, but it can also be overwhelming. We’re trying to find the balance where we help you navigate the space of possible integrations, without limiting you the way a no-code tool would. We would really appreciate your guys’ feedback and suggestions!
[1] - HN Follow, first launch: https://news.ycombinator.com/item?id=33533830
[2] - Val Town launch: https://news.ycombinator.com/item?id=34343122
[3] - `@rodrigotello.hnFollowApp`: https://www.val.town/v/rodrigotello.hnFollowApp
[4] - My fork of hnFollow: https://www.val.town/v/stevekrouse.hnValTown
86 comments
[ 2.8 ms ] story [ 159 ms ] threadBut wouldn't it be even nicer to have `console.push` in the platform and it'd then prompt you to accept notifications right from our desktop or mobile website? Maybe soon!
Andrew Healey wrote a great blog post about sandboxing, particularly related to us: https://healeycodes.com/sandboxing-javascript-code
And we recently launched more secure semantics: https://blog.val.town/blog/restricted-library-mode
But in the general case, it's a hard, never-ending cat-and-mouse game, particularly with free and unauthenticated use. We will eventually probably need to restrict use severely unless you have somehow proved you're a real person (ie connect to your github account) or are a paying customer.
We have exactly the same issues for the cloud and ended up securing everything through nsjail and the deno run sandboxing. I admire that you're willing to allow unauthentified users to run computations. Do you guys have timeout ? How do you ensure resource isolation? We use kubernetes for resource isolation, and we use both timeouts and quotas where each second a background process will kill the job if the user/job is over it. Let me know if you guys are up to chat at some point and congrats on the very nice UX.
Yeah we have a timeout, but will likely need to continue to add restrictions as we scale and get more abuse. We are mostly relying on deno's workers to isolate user code, but will probably add additional process isolation soon, and dedicated private resources for serious customers one day.
Would love to chat & share tips! Email me? steve@val.town
One point of view is that in the general case this problem is solvable, has been solved, and the solution isn't well known.
https://github.com/taylr/linkedinsanity
Thanks for the callout!
pg(3)
cj(4)
stevekrouse(2)
Each of above name is hyperlinked and leads to a page where I can see all their updates. The count in bracket let's me know how many updates they have. This is not necessarily a suggestion for this app. I wish more social media apps adopted this approach instead of current time hogging feeds.
Does this include comments, or just posting submissions?
IMO the former would be overkill for email notifications, and the latter would be not terribly useful.
https://www.val.town/v/stevekrouse.hnFollowApp
You can see all the tag types (and other search options) here: https://hn.algolia.com/api
Happy to help you customize it however you'd like :)
Yes, anyone can poll, but releasing a product that polls puts the onus on the product to honor the spirit of the site.
I come here because the site doesn’t have all of the usual social media features, which is arguably part of how/why the community is still an interesting place to visit.
HN is lucky in this regard; there is just one HN, not uncountable “sub-HNs”.
Of course people can still come from other places to HN. But to earn downvote privileges here you first need some amount of karma. So hopefully this makes it so that downvote privileges on HN are mostly handed to people who are at least somewhat aligned with the broader community here.
50 inauthentic upvotes for something no one likes, while hundreds of frustrated potential downvoters fume. Then someone puts up a reply designed to be upvoted as a proxy for the lack of ability to downvote the inauthentically boosted comment, and that reply is quickly deleted as trolling or a personal attack.
Showing the total number of views like Twitter does now is a positively-vibed kludge for people who hate the whiff of negativity, although all of Twitter's stats seem wonky as hell under new leadership. Still, a low upvote/view ratio can also represent indifference or people not believing they're qualified to comment on something, rather than being a great signal for disapproval.
So you can still game that pretty well by Gish Galloping with a ton of broad references (entire papers or books rather than passages from them or reasonable summaries), and lots of people will disqualify themselves from downvoting because they aren't going to click through to the papers, while others will upvote just because it looks like the commenter is making an effort.
By absolute user count I'd definitely expect most to not have it but only because most accounts aren't regularly used (many even abandoned).
Not saying it shouldn’t be this way, but downvotes are heavily biased toward people who regularly post or comment.
I think you underestimate how little some of us have to say.
The main issue is that if a comment gets downvoted when newly created, it looses almost all visibility (gets shown further down), and it mostly dies, just from one downvote
This just creates and echo chamber where only the most accepted/mainstream opinions bubble up
It would be nice if we could “sort by controversial” or “sort by new”, so that we got more variety of opinions
Open to abuse? Potentially, but so are a lot of community voting features, and reliably muting serial trolls would be a useful feature for a lot of social sites.
Not advocating that, of course, and it feels contrary to what the benevolent mod team would prefer. And I assume that the site has some countermeasure for that, like it does against upvoting a submission that you accessed via direct link instead from from the main site?
Like delete the div where div > div > span=WirelessGigabit.
table:has(> tbody > tr > td > div > span > a[href="user?id=USERNAME"])
(Note that if you see users that are frequently breaking the guidelines, please consider emailing the site mods using the footer contact link, so that they can consider whether further review and/or action is necessary.)
Platforms that implement blocking almost always see it weaponized by hate groups, not to mention how antithetical it is to allowing a user to control their feed, and the argument of "targeted harassment if people can see my content" doesn't hold water given how trivially easy it is to circumvent (if targeted harassment is the goal).
I found out this the hard way after coming across someone who posted on hn.
I want to know what the code I'm about to run will do and I notice the pretty unique `@stevekrouse.hnLatestPosts` type interface where it looks like you can reference functions. But this leads to a deep chain of reference. Like, that function leads to `@stevekrouse.hnSearch` which leads to `@stevekrouse.fetchJSON` which leads to `@stevekrouse.normalizeURL`, etc.
There is some kind of DAG of dependencies that is invisible to me. I'm wondering what could be done from a UI perspective here? Like, maybe a tree view where each node is expandable? Right now it just pops open a new browser tab and I end up with context spread across multiple tabs.
The concept of composable references is powerful but I think the UX could be improved.
You hover click on a method and a side panel shows up with source code of that method
I'm pretty sure the domain name was taken already.
Edit: some can hack it to tint people they like.
news.ycombinator.com##:xpath(//span[contains(@class, 'comhead')]/a[contains(@href, 'user?id=USERNAME')]/ancestor::td[contains(@class, 'default')])
Replace USERNAME with the user you don't want to see.
Edit: it only works on comments, but you can just as easily make one that hides their submissions as well.
Amazing! I had no idea uBlock could actually inject another style.
The val.town page is dedicated to developers and convinces with features. What I am missing is content. The explore page [1] has popular functions, which are the content of val.town, but they are not content in a social sense.
HN and reddit engage users before they make an account. It's very good that I can run code without making an account. But I have to interact and think before I am hooked. Could users be hooked on content? I could imagine a landing page on a second domain that would show the result of scripts that users vote to the top. (Of course the knowledge would lie in preventing dick pics.)
Adding votes should also be possible for the explore page itself. HN/newest is not as convincing as the ranked HN frontpage. A short Readme section and a result section would make the code more approachable.
The UX seems to be choosing precision over smoothness. Trying the HN Top Story in /explore, it's surprising that the result is just the title, without a link. To change that, I would prefer if a simple click on the function would directly allow me to edit the function. The ctrl-click with the new tab works, but it doesn't feel right.
[1] https://www.val.town/explore
One thing I wish was that other runtimes would be shipped aswell, like Ruby. But I understand that maintaing such runtime is a burden.
I know that Vercel supports Ruby as serverless runtime though, so I know it’s possible.
Other than that, I think val.town will boom in popularity soon. It’s a unique idea.