🌍 TheVerge

Framework’s premium laptop is shipping with less RAM

RAMageddon has claimed yet another victim, with Framework now announcing a "major and unfortunate" pricing update for its upcoming premium laptop - which also impacts folks who preordered it. Memory configurations for the Laptop 13 Pro have been adjusted after Framework says it received cost updates from its memory supplier that "are more than double […]
🌍 TheVerge

Google now lets you sign in to your account using a selfie video

Google announced yet another way to gain access to your account if you get locked out, forget your password, or don't have access to the phone, computer, or two-factor authentication apps you typically use. As the name implies, selfie video lets you capture a short video of your face on a mobile device or PC, […]
🌍 TheVerge

Google hit with $1 billion fine for breaking EU antitrust rules

The European Union has fined Google's parent company Alphabet €890 million (about $1 billion) for two separate violations of the bloc's Digital Markets Act (DMA). One penalty is for giving its own products preferential treatment in search results, while the other is for blocking Android developers from sending users to alternate payment options. A €460 […]
🌍 Dev.to

Block SSRF Redirect Chains Before Your URL Fetcher Reaches Private Networks

A user submits https://example.invalid/report . The first DNS lookup returns a public address, so the application approves it. The server responds with a redirect to http://169.254.169.254/latest/meta-data/ . A fetch client follows automatically, and the original allow decision silently becomes authority to contact a different host. This is the SSRF boundary many URL-preview and import services miss: a URL is not one network destination . DNS answers can change, redirects introduce new des...
🌍 Dev.to

Automate appointment reminders with the Nylas API

You booked a meeting on a customer's calendar, and you want them to get a reminder email the day before so they actually show up. The obvious build is a cron job that wakes up every few minutes, scans for appointments coming up in 24 hours, and fires an email. That's a polling loop you have to run, scale, and debug. There's a cleaner way that uses three Nylas features together: you read the appointment from the calendar, schedule the reminder email for exactly 24 hours before it, and let a templ...
🌍 Dev.to

Make Your CLI Config Write Survive Ctrl-C Without Leaving Truncated JSON

A small CLI reads config.json , changes one field, and writes the file back. The code looks harmless: await writeFile ( path , JSON . stringify ( next , null , 2 )); Then the process is interrupted during the write. The next run finds 347 bytes of what used to be a 2 KB file, JSON parsing fails, and a one-line settings command has become a recovery exercise. The useful contract is not “the write usually succeeds.” It is: After an interruption, the c...
🌍 Dev.to

Route Nylas notifications to Google Pub/Sub

An HTTP webhook endpoint has to be a public URL that's always up and fast enough to absorb a burst. When a sync kicks off and a few thousand message.created events fire in a minute, a slow handler backs up, times out, and starts dropping deliveries. You can engineer around that with a queue in front of your endpoint, or you can skip the endpoint entirely and have Nylas deliver notifications straight into a Google Cloud Pub/Sub topic, where the queue is the delivery mechanism. This post cove...
🌍 Dev.to

Learn Topological Sort by Making a Build Graph Explain Its Cycle

A build graph contains these edges: parse -> typecheck -> bundle -> parse There is no valid first task. A topological sort should not return a partial list and quietly stop; it should explain why the graph cannot be ordered. This project teaches two connected ideas: Kahn's algorithm produces an order for a directed acyclic graph (DAG). A separate depth-first search can turn “some cycle exists” into a concrete cycle a learner can inspect. Prerequisites: P...
🌍 Dev.to

Give Every Feature-Flag Exception an Owner, Expiry, and Removal Cost

A rollout reaches 80%, but one customer remains on the old path. The exception enters a spreadsheet as “temporary.” Six months later, nobody knows who approved it, which metric justified it, or whether removing the old path would break a contract. The flag is no longer reducing launch risk. It is financing two products indefinitely. A useful exception is a time-bounded decision with evidence. Use a ledger whose minimum record is: exception : legacy-export-path owner : plat...
🌍 Dev.to

Make CSV Export Idempotent From Browser Click to Worker Completion

A user clicks Export twice because the first click shows no feedback. The API creates two jobs. A worker retries one after losing its acknowledgement, producing a third object. The UI eventually displays three links for the same request. Disabling the button reduces accidental clicks; it does not make the workflow correct. The invariant belongs across every layer: One authorized export intent maps to one durable operation and one logical artifact, despite duplicate delivery. ...
🌍 Dev.to

Build an Accessible Optimistic Toggle That Can Admit It Was Wrong

A user presses Space on “Email alerts.” The switch immediately turns on. The request fails, the UI silently flips back, and a screen-reader user receives no explanation. Optimistic UI made the happy path faster by making the failure path ambiguous. The control needs four truths, not one Boolean: type ToggleState = { confirmed : boolean ; desired : boolean ; requestId : number | null ; error : string | null ; }; confirmed is...
🌍 Dev.to

Reject Queue Work by Deadline Slack Before Utilization Looks Dangerous

At 09:12, workers are 62% utilized and every health check is green. At 09:14, users receive results after their deadlines. CPU never crossed the alert threshold; the queue accumulated work faster than it could drain. Utilization describes resource occupancy. It does not tell whether queued work can still finish on time. For each job, record: deadline_slack = deadline - now - estimated_service_time When slack is negative, starting the job cannot meet its declared deadline ...
🌍 Dev.to

Test Whether Mobile Backup Restores Data Without Restoring Its Key

A user restores an application backup onto a new phone. The encrypted database returns, but its key does not. The app opens to an endless loading state because storage recovery and key recovery were designed as one event even though the operating system treats them differently. The opposite failure is worse: data intended to stay device-bound becomes readable after restore because both ciphertext and key entered backup. Do not infer this behavior from API names such as “secure storage.” Te...
🌍 Dev.to

Expire AI Approval When the Evidence Changes, Not When the Screen Closes

A reviewer approves an AI-generated refund plan after seeing 12 affected orders and a $430 total. Before execution, the system refreshes its data: there are now 19 orders and a $760 total. The approval button remains green because the interface treats consent as a property of the session, not of the evidence. Approval should authorize one versioned action envelope: plan_id : refund-batch-184 plan_revision : 7 evidence_revision : orders-snapshot-31 action : issue_ref...
🌍 Dev.to

Make an Outbox Relay Lease Expire Without Violating Delivery Invariants

Relay A claims outbox row 42 and publishes its message. Before A records completion, its lease expires. Relay B claims row 42 and publishes it again. Both relays behaved according to their local state; the broker received a duplicate. A lease prevents unlimited concurrent ownership. It cannot create exactly-once delivery across a database and broker without a shared transaction. The honest contract is: Every committed outbox event is eventually offered at least once; consumers preserv...
HackerNews

Businesses with ugly AI menu redesigns

Article URL: https://blog.fiddery.com/businesses-with-ugly-ai-menu-redesigns/ Comments URL: https://news.ycombinator.com/item?id=49005973 Points: 320 # Comments: 231
HackerNews

Protecting our FLOSS commons from LLMs

Article URL: https://blog.codeberg.org/protecting-our-floss-commons-from-llms.html Comments URL: https://news.ycombinator.com/item?id=49015635 Points: 92 # Comments: 33
🌍 Dev.to

Adapter: The Travel Plug Pattern

Adapter: The Travel Plug Pattern This is the easiest design pattern to understand, because you've literally held one in your hand. The travel plug You fly from India to the UK. Your phone charger has round Indian pins. The UK wall socket wants flat rectangular pins. Do you throw away your charger? Rewire the hotel wall? Of course not. You buy a cheap travel adapter. Charger plugs into the adapter, adapter plugs into the wall. Done. Nothing got modified. The charger is u...
🌍 Dev.to

The Postgres migration that locks your table at 3am, and how to catch it in review

-- looks fine in review, locks your busiest table in prod: ALTER TABLE users ALTER COLUMN email SET NOT NULL ; -- same result, no outage: ALTER TABLE users ADD CONSTRAINT users_email_nn CHECK ( email IS NOT NULL ) NOT VALID ; ALTER TABLE users VALIDATE CONSTRAINT users_email_nn ; ALTER TABLE users ALTER COLUMN email SET NOT NULL ; The top one scans every row under an ACCESS EXCLUSIVE lock, so every read...