HNHacker News
TopNewBestAskShowJobs

jacobobryant

1,374 karma · joined April 12, 2017

Personal site: https://obryant.dev

Working at https://tyba.ai

Building https://yakread.com and https://biffweb.com

email: hello@obryant.dev

submissionscomments
jacobobryant··on Demonopolizing the Internet with Interoperability
Yep, the good old adapter pattern.
jacobobryant··on Curated list of personal blogs
This really is a fantastic resource (thanks!). I've found several great posts from it, including this one[1] which made a huge impact on me.

[1] https://rootsofprogress.org/a-career-path-for-invention

jacobobryant··on Show HN: Side Quest – An aggregator for not full-time tech jobs
One of my predictions/hopes is that part-time work becomes far more prevalent. In addition to the benefits already mentioned here, it would be great for people who want to be e.g. entrepreneurs or independent researchers. Wrote a bit about this here: https://jacobobryant.com/p/what-im-trying-to-do/#1-help-buil...

Also relevant: https://sahillavingia.com/work. I'd like to make a collection of part-time success stories like this.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
> Moreover investment of time on user side for newsletter delivering news increases with each newsletter vs One newsletter delivering what I want.

You might be interested in this article[1] and the discussion of subscribed vs. filtered sources. It'd be nice to have a convenient way to assign different priorities to newsletters/content sources. So for a few, you'd get every issue, and for the rest, they'd be combined together in some way.

> You're welcomed to join the discussion on 'Get me the news I need, not the news I want' by explaining what Sample does to address that problem.

I'm not sure I have much insight about needs vs. wants, but you might be interested in The Factual.[2]

[1] https://jacobobryant.com/p/the-pros-and-cons-of-algorithmic/

[2] https://thefactual.com/

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
(FYI looks like Needgap is down right now; Cloudflare is showing me a 521 response)

There are a few reasons. The biggest one is distribution. I came up with the idea for The Sample because I was working on an essay recommender system[1] and I was trying to figure out how to incentivise people to share it. I've built a referral system[2] into The Sample, and whenever someone submits a newsletter, I send them a referral link. If they share the link, their newsletter gets forwarded more often. So far it's been promising; last I checked, about 15% of our subscribers came from referral links. As The Sample gets larger, the referral system will become more compelling (network effects). I've used a fair amount of paid advertising to get things going, but after some threshold, I think it will grow extremely fast with just the referral system.

The next reason is implementation-related. I prefer to use collaborative filtering as much as possible, falling back to content-based filtering only when there isn't enough rating data for collaborative filtering. But for collaborative filtering, you need long-lived items. If you're recommending news articles, by the time you collect much rating/interaction data, the article will be stale and you won't want to recommend it more anyway[3]. Recommending newsletters is IMO an excellent way to combine ML with human curation: humans figure out what news is good, and ML helps readers find curators who are good/relevant to them.

[1] https://essays.findka.com

[2] https://jacobobryant.com/p/an-algorithm-for-driving-newslett...

[3] Unless perhaps you're a large news site and can collect lots of interaction data quickly. An interesting thing about my situation is that I'm trying to bootstrap a recommender system from the beginning, whereas most recommender systems today were built as an add-on for another product, after it already had lots of users.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Something like that could be an option; see also this other comment.[1] However every time I've thought about "hey, what if we made the 20% better by...", my conclusion has been "oh, but then we might never recommend [items with some set of properties that should get recommended], and the algorithm won't be able to correct itself." Any time you try to optimize in a certain direction, you'll always introduce at least a little bias[2], and randomness at least gives a chance of breaking out of that. So something like this could be a good idea, but I wouldn't want to have it completely replace random recommendations.

[1] https://news.ycombinator.com/item?id=27669863

[2] This experience has affected the way I perceive advice from people on the internet

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Sorry to hear that. It's possible there's just not much in the corpus that matches your interests. Re: the algorithm, it should start improving faster soon. I'm in the middle of a large refactoring, and I've recently been joined by someone who will work solely on the algorithm after that. (I'm spread pretty thin myself).

FWIW the average rating is 2.5, which does seem kind of low, but still indicates that you're probably an outlier. That being said I've been relying mainly on regular newsletter engagement metrics to judge how effective the recommendations are, since rating can be a little unreliable (people are more likely to rate something when they've had a bad experience). Lately we've been at 46% open rate and 16% click-through rate.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Yes, I would like to do that--combine it with the rating prediction, so e.g. if two newsletters both have a predicted rating of 4 stars, prefer the one with content that's most dissimilar to the users' positively rated newsletters so far.
jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
I wouldn't worry too much about the topics: https://news.ycombinator.com/item?id=27666763

To add to that, topic modeling/content-based filtering is only used as a starting point anyway; as you rate the newsletters you receive, your recommendations will start to be dominated more by collaborative filtering ("people who liked X also liked Y", without thought for what X and Y are about).

Also, the "21 days" thing is pure marketing/explanation :). It's just an attempt to help people (especially non-technical people) understand that it'll adapt to your preferences over time. It'll start adapting immediately, and it'll continue adapting after 21 days.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Glad you like it!
jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
(response to edit)

> The classification problem is interesting though. I ended up with a long list of hundreds of topics. Most articles fall in two or more. There's also a sub-problem of clustering news by subject.

Yeah, certainly difficult. I'm doing it partially manually right now but also with fastText[1]. I'd like to switch completely to fastText soon though since more often than not the newsletters I add don't fit well with the checkbox categories on the landing page. Clustering the newsletters with fastText is pretty easy, but it might be hard to generate good tags for the landing page that match up with the clusters.

[1] https://fasttext.cc/

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
> people prefer a few hand selected news to an automatic feed.

That's actually one of The Sample's strengths--it leaves most of the curation to humans, and then it helps people find those curators.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
I'm planning to build a business on this, so probably won't open-source it--but I'm always looking for interesting things to write about! I write a weekly newsletter called Future of Discovery[1]; I might write up some more implementation details there in a week or two. In the mean time, most of the heavy lifting is done by the Surprise python lib[2]. It's pretty easy to play around with, just give it a csv of <user id>, <item id>, <rating> and then you can start making rating predictions. Also fastText[3] is easy to mess around with too. Most of the code I've written just layers things on top of that, e.g. to handle exploration-vs-exploitation as discussed in another thread here.

Recently I've been factoring out the ML code into a separate recommendation service so it can different kinds of apps (I just barely made this essay recommender system[4] start using it for example).

I'm happy to chat about recommender systems also if you like, email's in my profile.

[1] https://findka.com

[2] http://surpriselib.com/

[3] https://fasttext.cc/

[4] https://essays.findka.com

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Thanks, and totally agree about owning the stack! This is intended to provide a network for newsletters without trying to suck them into a platform--we introduce people to newsletters, but we don't forward anyone the same newsletter more than one time; so if they want to keep getting it, they can subscribe via the newsletter's subscribe page.
jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
The categories are pretty fuzzy, and I need to update the ones on the landing page. After you sign up, there's a text field where you can add arbitrary tags. And as time goes on, the algorithm will experiment with sending you different things and expand beyond whatever topics you gave it anyway. In truth, the only reason I even put those check boxes on the landing page is to help people understand what the thing even does :) (a surprisingly difficult problem for people not familiar with recommender systems).
jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
> I disagree that it's overblown.

Fair enough. To be clear, I'm not saying ML bias isn't a significant problem; and certainly I'll continue to address it as the project grows. Based on this, it sounds like we might be in agreement mostly:

> But I also think bias, or echo-chamber, isn't unique to ML since we see it so much in the world and institutions that surround us, but we are in a unique position to address these problems directly on the systems we create.

I often run into people (usually not ML practitioners) who appear to think that ML inherently results in filter bubbles/bias (as opposed to specific ML implementations) and thus think the entire approach should be abandoned; whereas I think ML, with a proper focus on reducing bias, is one of our most promising options.

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
Yes, the algorithm accounts for the exploration-vs-exploitation problem.[1] Right now it uses a simple epsilon-greedy strategy: 20% of the newsletters you receive are picked completely at random. I also use a technique I call "popularity smoothing," which limits the number of times that popular newsletters can be forwarded.

I think the concerns about ML causing echo chambers/other problems, while not completely unfounded, are overblown (perhaps due to the overall anti-big-tech sentiment). I think human behavior plus ease of sharing online is a much larger factor. I'm optimistic that ML filtering can actually help people get a much larger variety of information, which is one of my goals for this.

[1] https://en.wikipedia.org/wiki/Multi-armed_bandit

jacobobryant··on Show HN: The Sample – newsletters curated for you with machine learning
This is the latest of several recommender systems[1] that I've attempted to grow over the past couple years. It launched in February and there are about 800 subscribers. The algorithm uses a collaborative filtering model ("people who liked X also liked Y"), and to help with cold-start I augment the training data with content-based filtering: I use keyword extraction (tf-idf) and a pre-trained language model (fastText) to cluster the newsletters, then for each cluster I generate k "fake users" who like each newsletter in the cluster. This way, the model will gradually switch from content-based filtering to collaborative filtering as it collects user ratings.

Some of the newsletters I found on my own, but most are submitted by users (there's a "what other newsletters do you subscribe to" question after you sign up). I set up an inbound-only mail server, and I generate a unique address for each newsletter, which I use to sign up manually. I approve each issue that comes in so that we don't forward welcome emails, promotions etc. (It only takes 5 - 10 minutes a day). Before forwarding I also scrub out any links with certain keywords like "unsubscribe", "manage your preferences" and so on. It's not a perfect process but it's good enough for now.

Long-term I want to build a genaral-purpose recommender system[2]. I'm starting with newsletters because I think it'll be the easiest way to grow fast initially (which seems to have been validated so far). The short explanation is that I've designed The Sample to be extremely effective at cross-promotion[3]. (If you have a newsletter, submit it at https://sample.findka.com/submit/ and I'll send you a referral link).

[1] https://news.ycombinator.com/item?id=24921127

[2] https://jacobobryant.com/p/why-newsletters/

[3] https://jacobobryant.com/p/an-algorithm-for-driving-newslett...

jacobobryant··on Ask HN: Freelancer? Seeking freelancer? (June 2021)
SEEKING WORK | Seattle | Remote: yes (preferred)

Full-stack Clojure web developer with 4 years professional experience. Seeking part-time work while I bootstrap my own business (https://sample.findka.com, a newsletter recommender system). I made a web framework: https://biff.findka.com.

hello@jacobobryant.com. See also https://jacobobryant.com/freelancing/.

jacobobryant··on Newsletter platforms: please support 1-click subscribe
That would be a concern for auto-importing the addresses into the promoted newsletter (obviously you don't want to just expose an endpoint that says "POST an email here to bypass captcha and confirmation email!"), but for the first half of the problem (allowing the promoter to know who clicked the link), I'm pretty sure it just hasn't been prioritized. Mailchimp already supports web hooks for click events.

Once that side is taken care of, importing could be done between trusted parties, but yeah, might need to address that in the ToS/privacy policy first.

jacobobryant··on Complexities of e-mail validation logic
I do the validation email, works great. Just be sure to protect the sign up form with some type of bot detection (I use recaptcha, but simpler methods are fine for most sites).
jacobobryant··on Complexities of e-mail validation logic
I just outsource this to Mailgun. User signs up, I send them a confirmation email, account doesn't get created till they click the link. If the email address is invalid, Mailgun returns an error and I show a page that says "We couldn't send an email to <address>. If you're sure that's a valid address, please try again." (Also use recaptcha for bot detection).
jacobobryant··on Shifting the impossible to the inevitable: A Private ARPA user manual
I read parts of this over the weekend after finding it via "We need a career path for invention"[1], another good article. Both of them focus on the idea that there's an unfilled space right now between research and entrepreneurship. From the latter:

> The bottom line is that if a young person wants to focus their career on invention—as distinct from scientific research, corporate engineering, or entrepreneurship—the support structure doesn’t exist. There isn’t a straightforward way to get started, there isn’t an institution of any kind that will hire you into this role, and there isn’t a community that values what you are focused on and will reward you with prestige and further opportunities based on your success. In short, there is no career path.

This resonated with me; long story short, that describes pretty well how I feel about my career so far. That being said, for software developers I think the situation isn't so bad. PARPA addresses the harder problem of invention in the "world of atoms" -- but in software it's feasible to do freelancing/consulting and then have flexibility to spend time on open source. I might be switching to that soon, after having spent the past few years on entrepreneurship. I wish I had thought seriously of freelancing + open-source as a career path while I was in college (or even better, before college; it could've saved me a lot of time on homework!).

[1] https://rootsofprogress.org/a-career-path-for-invention

jacobobryant··on Bitemporal History
Shout out to Crux (https://opencrux.com/), a bitemporal database. I've been using it for a year now and it's fantastic.
jacobobryant··on Show HN: Skruv – No-dependency, no-build, small JavaScript framework
Yes, exactly. I did SPAs with ClojureScript for a while, but lately I've switched to server-side rendering with Rum. This post popped out at me since I've been thinking about options for adding interactivity to the front end without adding a build step.
jacobobryant··on The Web’s Missing Interoperability
I have seen it but haven't looked into it too deeply. I think it's more complex/sophisticated than what I have in mind. i.e. it's meant to be a protocol for an entire social networking app, whereas I'm interested in a much smaller scope: just a raw event log. I figure if that's in place, everything else can be built on top. Heck, you could even use it as a base for an ActivityPub implementation! Write a tweet -> gets imported into your RSS event log -> gets published via ActivityPub.

Also, there is another protocol called Pubsubhubbub (yeah, I know...) which adds push on top of Atom/RSS. I know of at least one company, Superfeedr, that runs an implementation as a service (they were acquired by Medium): https://superfeedr.com/

jacobobryant··on The Web’s Missing Interoperability
It's hardly more effort than making a Facebook account, and replit is still young--it's only going to get easier.
jacobobryant··on The Web’s Missing Interoperability
Entering in username + password is probably the only feasible way. Suboptimal for sure, but worked for mint...

In practice, this would probably start out with plugins for only sites that make data public. Not perfect, but still useful.

jacobobryant··on The Web’s Missing Interoperability
It'll scale because it's self-hosted. You don't serve everyone with the same app instance; everyone runs their own instance.
jacobobryant··on The Web’s Missing Interoperability
The app would include a database (perhaps sqlite), so that shouldn't be an issue unless I'm misunderstanding you. you can host it for free on replit already (albeit with sleeping/cold starts)
← PreviousPage 5 of 10Next →