HNHacker News
TopNewBestAskShowJobs

dyogenez

159 karma · joined November 16, 2009

Currently building a replacement for Goodreads out of spite for Amazon at https://hardcover.app

Previously: Pluralsight - 2014-2018 (IPO) Code School - 2011-2014 (acq by Pluralsight) Izea (Sponsored Tweets, PayPerPost) - 2009-2011

submissionscomments
dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
That's good to hear Any chance to bring in Ruby.

I'm not familiar with Cloudflare R2, so I'll have to check it out. I do like that we can rate limit based on either User ID requesting an image from the API, or by IP address. I'm not sure how we'd handle segmenting by user id with a CDN (but I'd have to read more to understand if that's a possibility).

dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
That's my worry too. Our server load for our Rails server hasn't gone up even though our throughput has maxed out at 76k requests/second (which I think is a bunch of people from Hacker News going to the Hardcover homepage and downloading 100 images).

I don't like that if Rails goes down our images go down. I'd much prefer to separate these out and show the signed URLs in Next.js and be able to generate them through the API. I think we'll get there, but that's a bigger change than I could reliably make in a day.

dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
Hopefully here. Sometimes the best way to get people to respond is to be wrong. I'm sure I've done a bunch of things wrong.
dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
Putting a CDN in front would prevent this at the bucket level, but then someone could still hit the CDN at 10k requests/second. We could rate limit it there though, which would be nice.

The downside is that people already have the URLs for existing bucket directly. So we'd need to change those either way.

The reason why the attacker couldn't just hit the API to get the signed URLs is due to rate limiting that I go over using the rack-attack ruby gem. Since that's limited to 60/second, that's more like 43k images/day max.

dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
That's a good idea. I probably could've put a CDN in front of this and rate limited there while keeping things public. That might've been faster than using Ruby to be honest. The downside was that our API already shared the non-CDN URLs, so that would leave the problem open for anyone who already had that data.
dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
Ohh good catch. Just updated the post with a section mentioning what signed URLs are before jumping into the solution.
dyogenez··on We survived 10k requests/second: Switching to signed asset URLs in an emergency
Earlier this week someone started hitting our Google Cloud Storage bucket with 10k requests a second... for 7 hours. I realized this while working from a coffee shop and spent the rest of the day putting in place a fix.

This post goes over what happened, how we put an a solution in place in hours and how we landed on the route we took.

I'm curious to hear how others have solved this same problem – generating authenticated URLs when you have a public API.

dyogenez··on Show HN: Shepherd – I asked 1,201 authors for their 3 favorite reads in 2023
Very cool Ben! I love the idea and seeing the results collected is fun for finding some books I missed this year.

I haven’t heard too much about Demon Copperhead. Adding that one to my list.

dyogenez··on Show HN: Hardcover – Letterboxd for Books
BookWyrm is doing some really cool stuff. Definitely want to see them succeed too. I like the idea that we'd eventually be able to federate with them down the line once we hit a point where we're at least cover costs.
dyogenez··on Show HN: Hardcover – Letterboxd for Books
Hey hey! We've talked with a bunch of people using notes and sheets to manage their libraries. Seems to be a common trend from people who want a little more control than Goodreads offers. Here's my take on each of these:

> 1. Is there a way to bulk edit a list?

Not today, but I love the idea. What were you hoping to do in bulk? Change a status? Add to list? etc?

> 2. Related to the first one, when I click the "Want to Read" big yellow button, it takes about 100-200ms for something to show or be clickable.

Yeah, good point. We do like 4 queries there to get all the data for the button, but we could do that in one query and get everything. That would speed it up. We've also talked about splitting the button into a "mark as want to read" button and a "dropdown" button. That way if you just want to mark as a book as "want to read" it's only 1 click.

> 3. When in Airlist when I click manage, nothing appears

Hmm, I see what you mean. That's supposed to be a dropdown with options for edit list, reorder list, save list ordering (in localstorage). But we're in the process of rebuilding that feature, which means sometimes there are no options there. Adding this to our issue tracker.

> 4. This is a suggestion, make it possible in the settings to configure what the home page

That's an interesting one! We've talked about two things that could help there. One is making the feed filterable. If we added feed items for blog post and you could set your filter to only show those that would work. The other thing was creating widgets to show in the left/right columns on the feed page. Do you feel like either/both of those would work?

> 5. Do you think it will ever be open source?

Yes! We have a path to open sourcing that we're starting down this year. It's a difficult one to run locally due to the 8 docker containers needed as well as a lot of local data for books. Right now a big advantage of the team is our agility, and at the moment open sourcing (and getting to the point people can actually run the app) would take some time.

We are thinking about open sourcing the front-end first though. In that case people would work on the Next.js app but use a staging API/database. Any thoughts on that kind of approach to start? Or are you much more curious about the Rails side?

dyogenez··on Ask HN: Who's Retired?
I retired 5 years ago after the startup I worked for went public. Retired maybe isn’t the right term, as our spending has grown and we likely don’t have enough to live on for the rest of our lives (but it would be close).

In the meantime I’ve created all the projects I wanted to work on while I was working a 9-5. That’s been fulfilling and fun! And if a project isn’t I can always just stop or change it.

dyogenez··on Show HN: Hardcover – Letterboxd for Books
Aww, thank you so much! I think I saw you joined our Discord too. Welcome to the community. :)

The recent redesign of the book page alone took about 6 months of research, prototypes and discussions with readers before it got to where it is today. One of my favorite parts was posting on Discord, getting feedback, and then updating the designs over and over until it was right. I think we'll probably do that again for Discussions and Author page updates next.

dyogenez··on Show HN: Hardcover – Letterboxd for Books
Thank you so much! We've heard that from a dozens of members too. That's kind of staggering to me that two people working part time can create something that can compete with a top 100 site in the world owned by a trillion dollar company.
dyogenez··on Show HN: Hardcover – Letterboxd for Books
Thanks Mike! It's been a ton of fun to build this out.
dyogenez··on Ask HN: What app do you use for book recommendations?
I missed this when you posted, but I'd love for you to check out Hardcover! ( https://hardcover.app/ ).

We do exactly what you described - recommending books based on collaborative filtering and comparing your tastes with similar readers. There are a few ways we make this available:

• We calculate a "match score" from 0% to 100% for you with each book that we can. A score of 100% means we're pretty sure you'll rate it 5 out of 5. An 80% means we think you'll rate it 4 out of 5. We show this score throughout the site. This is similar to Netflix's match score (but a lot more basic ). I've found it's a lot of fun to follow people, then see this score next to books people are interacting with. That combination can lead to finding some gems.

• On the "Recommendations" page we show you the books that have the highest match score for you. You can filter the books on this page by popularity. Books with more readers means the Match Score will be more accurate.

• On every books page, we show "ratings by similar readers" and "reviews by similar readers". This gives you a quick way to see what other readers with similar taste think of each book.

• We have a Readers Page to find which readers have the closest taste to you. You can follow them if you want to see what they're reading.

We have all the same tracking you'd expect from GR/SG - tracking what you read, dates, stats, a feed of friend activity, private/followers-only books (in case you want to not have everything public) and a lot more.

If you join, I invite you to jump on our Discord and say hi!

Adam https://hardcover.app/@adam

dyogenez··on Is this the end of social networking?
Love the video explaining how it works.
dyogenez··on What Happened to Tagging? (2019)
Hey, and thanks for bringing the concept of tagging to the world!

The idea that tags were meant for the individual makes a lot of sense. That’s how I used delicious. It was like my bookmarks folder, but links could be in multiple folders.

When it comes to collaborative tagging, are there any successful examples that you’ve seen? Or sites you feel are using tags in interesting or surprisingly useful ways?

dyogenez··on Hasura GraphQL Engine 2.0
I’m using Hasura for the first time for my current startup, and it’s been a game changer for speed so far.

What I’m loving most about it is how is changes the team schedule. Let me explain.

Usually, we’d prototype out what we wanted to build, verify with users, then create the overall data models.

For every single new feature, we’d create API endpoints (REST or GraphQL) and then the front-end.

With Hasura (or Supabase or Firebase for that matter), we skip the API step for _most_ pages. If a page can be built 100% using CRUD operations, it’s a awesome!

If a page can’t be done this way (lots of multi-table transactions, TensorFlow, background processing needed), we hand it off to our Express.js app either through Hasura triggers or federated GraphQL to handle it.

In that case, the amount of work to do is the same as if we weren’t using Hasura.

After 13 years of Ruby on Rails development this has been a major change in how I build apps - but one I’m excited about. I wrote up a post detailing more about why I’m making the switch on my startups blog too if you’re curious: https://hardcover.app/blog/the-perfect-startup-tech-stack

dyogenez··on Got 15 minutes and want to learn Git?
(Hey hey! I'm also from Code School. Normally wouldn't want to sound too market-y and respond, but also didn't want to leave this one unanswered. The follow-up courses are paid.)

Here's our git path, with covers a bunch of Git topics: https://www.codeschool.com/learn/git

In Git Real and Git Real 2, we cover cloning, branching, rebasing, stashing, submodules and more.

In Mastering GitHub, you move out of the browser, and all of your work is done on a fork of a GitHub repository -- with our bot collaborating and checking your work on there.

dyogenez··on Show HN: Exposé – a static site generator for photos and videos
This is seriously cool! I'm going to have to checkout the code for this one to see how some of this was handled.

Do you have any other sites doing photo/video stories which have been an inspiration for this project?

dyogenez··on How a Bug in My Ruby Code Cost Code School $13,000
Good point! Delayed Job actually has an exponential backoff build in. It'll run 25 times, with an increasingly large time between attempts before it gives up.

The issue comes in when it doesn't know a job actually failed, as was the issue in this case. Since the process was `kill -9`'d delayed job wasn't aware the job failed and attempted to run it again as though it was the first attempt.

dyogenez··on Show HN: My side project that searches the web for technologies
The custom matcher idea for technologies is really cool. I was thinking about doing a similar thing, but as an open source project that people could contribute matchers - but your approach is a lot easier for people to contribute.

Think there could be a problem where people might not want to contribute when they can't use what they contribute outside of your system. Have you considered extracting the matcher into a gem (or _your language equivalent_) and allowing people to use the matcher? Might not be the best idea because it opens up competition, but if it became the defacto tool for analyzing sites, there would be a lot of trust back your way.

On a side note, if this was an open library, or you did have an API to pull information, I'd contribute and definitely use it on a site I recently built ( http://lineofthought.com/ ).

dyogenez··on Show HN: Review my site LineOfThought.com, Share the technology behind your site
I like the idea. Right now you can only list out the technology behind a website, but it definitely sounds useful to be able to see the technology behind another technology. Also, it'd be possible to grab certain info from the github API like the default language, and maybe some other things.
dyogenez··on Show HN: Review my site LineOfThought.com, Share the technology behind your site
Right now any site can be added. The only restriction is only one site can be added per domain/subdomain. So you can't add individual pages - only entire sites.
dyogenez··on Show HN: Review my site LineOfThought.com, Share the technology behind your site
Clickable: http://lineofthought.com/

Tools powering Line of Thought: http://lineofthought.com/sites/lineofthought

Here's a few examples pages too:

Tools powering Twitter: http://lineofthought.com/sites/twitter

Sites using Python: http://lineofthought.com/tools/python

Sites using Ruby on Rails: http://lineofthought.com/tools/ruby-on-rails

dyogenez··on Code School now open to the public
Definitely worth it. Went through it a few weeks ago and learned a lot - even though I've been using Rails for years. It goes into a lot of Rails 3 best practices too, so helps to make sure you're on the right track there. Really like the approach they take too -- sometimes writing code from scratch, sometimes refactoring bad code to best practices.
dyogenez··on Ask HN: Show me your Half Baked project
Thanks! I really want to get it to the point where it can look into your friends lists to generate lists as well.

For instance -- What're my girlfriends favorite movies that I've never seen? Or What are my friends favorite movies of all time (that I have seen or haven't seen)? In the end it's all about keeping track of what you've seen, and helping decide what you should see next though, so it might have Netflix integration so I don't have to reinvent the recommendation wheel either. What movies you'll like is only half the equation though -- the other half is what people you know are actually watching!

dyogenez··on Ask HN: Show me your Half Baked project
http://movief.ly

Wanted a place to keep track of what movies I was watching, when and who I was watching them with, and then be able to recall them later.

For instance: Recent movies watched http://movief.ly/users/adamfortuna/viewings

Movies first seen in 2009 http://movief.ly/users/adamfortuna/lists/first-seen-in-2009

Never went beyond the 'scratch my own itch' stage, but gomiso seems to like the idea of checking in to TV/movies.

dyogenez··on Ask HN: Who Is Hiring? (October 2010 Edition)
Orlando, Florida - IZEA, Inc. - Senior Ruby Developer

http://toprubyjobs.com/jobs/6-izea-senior-ruby-developer

Izea is a really fun place to work, and you'd be working with a team of other ruby developers integrating with lots of well known systems (Twitter, Wordpress, Blogger, Oauth, etc).

Sites you'd be working on:

http://sponsoredtweets.com http://socialspark.com http://payperpost.com http://wereward.com (and iPhone app!) http://inpostlinks.com http://izea.com

We're only hiring locally, but we're doing the whole "we'll help with your relocation expenses", so if you're a Ruby dev who is interested in moving to Orlando, please apply!

dyogenez··on Duck Duck Go's Experiences with ad.ly
That's what I thought too based on all the press (TC, RRW, Mashable), but the next day Twitter clarified that sites like Ad.ly and SponsoredTweets aren't in violation. Their change was aimed at services that show the Twitter stream intermixed with ads based on the content that aren't from Twitter. Since Twitter is rolling out their whole "in stream ads" platform that app developers can use soon, this seems to target that - and other places that try to target ads based on the surrounding Tweets. (note: I work on SponsoredTweets, so we've obviously been watching this closely. :)
← PreviousPage 2 of 3Next →