Recent submissions

Comment · 7 months ago
We've released Repeat After Me across all platforms.

Desktop: https://tinyurl.com/repeat-after-me-app

Android: https://play.google.com/store/apps/details?id=com.repeatafte...

iOS: We are working on the App Store release. In the mean time, you can 1) Go to Safari and open https://tinyurl.com/repeat-after-me-app 2) Hit Share -> Add to Home Screen (iOS)/Dock (Mac)

Comment · 7 months ago
For those on Mac or iOS, you can open the link in Safari and Share -> Add to Dock (Mac)/Add to Home Screen (iOS) to try out the WebView. We are working on getting this in the App Store.
Comment · 7 months ago
Thanks, that looks interesting! Let me evaluate it and see if it can directly integrate into the product.
Comment · 7 months ago
Also, it works best on desktop. There's unfortunately a lot of TTS and STT interventions in Android and iOS
Comment · 7 months ago
Hello everyone,

I have worked as an early engineer in multiple startups before, including in the Ed-Tech space, and always wanted to build something that works in a unified manner across languages.

With tailwinds in voice AI, I decided to build "Repeat After Me", which is targeted at language learners of all ages. Curated content from classics provides a guided approach to refining their language skills.

We plan to add more feedback features such as gamification and your thoughts would be very helpful in that direction.

Comment · 1 year ago
I'd be happy to make the changes to the codebase but there's definitely scope for improvement. Putting a sleep to avoid repeated lock acquisition should have raised an eyebrow or two when it was implemented.

As mentioned, there should be a read-replica specific code that works using event listeners. Repurposing the primary's code is what causes the issue.

The following pseudocode would give a better picture on the next steps

// Read replica specific implementation

void StandbyWaitForTransactionCompletion(TransactionId xid) {

// Register to receive WAL notifications about this transaction RegisterForWALNotification(xid);

    while (TransactionIdIsInProgress(xid)) {
        // Wait for WAL record indicating transaction completion
        WaitForWALEvent();
        CHECK_FOR_INTERRUPTS();
        
        // Process any incoming WAL records
        ProcessIncomingWAL();
    }
    
    UnregisterForWALNotification(xid);
}
Comment · 1 year ago
The fundamental problem is that a synchronous, lock-based approach is being used in an asynchronous, event-driven context (logical replication).

The Postgres team needs to go back to the drawing board and avoid polling altogether and more importantly have event-listener based approaches for primary and replicas separately

It's great to see ClickHouse contributing to Postgres though. Cross-pollination between two large database communities can have a multiplying effect.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton