AI 资讯
The Token Bucket Algorithm: Build Server-Side API Rate Limiting in ~40 Lines
The Token Bucket Algorithm: Server-Side API Rate Limiting in ~40 Lines Plenty of tutorials teach you how to survive someone else's rate limit with retries and backoff. Far fewer show you how to build one. If you run an API, you need rate limiting on your side too — to protect your database from a runaway client, keep one noisy tenant from starving everyone else, and give abusive traffic a polite 429 instead of a melted server. The cleanest algorithm for the job is the token bucket . Let's implement it from scratch, then make it production-ready. How token bucket works Picture a bucket that holds up to capacity tokens. Every request removes one token. The bucket refills at a steady refillRate (tokens per second), up to its cap. If a request arrives and the bucket is empty, it's rejected. This gives you two useful properties at once: A sustained rate — the long-run average, set by refillRate . A burst allowance — clients can spend the whole bucket at once, set by capacity . That burst tolerance is why token bucket feels fair. A user who's been quiet for a minute can fire off a batch of requests without being punished for it. A minimal implementation Here's a self-contained bucket in JavaScript. No dependencies, no timers — we compute refill lazily based on elapsed time, which is both simpler and more accurate than a background interval. class TokenBucket { constructor ( capacity , refillRatePerSec ) { this . capacity = capacity ; this . refillRate = refillRatePerSec ; this . tokens = capacity ; this . lastRefill = Date . now (); } _refill () { const now = Date . now (); const elapsedSec = ( now - this . lastRefill ) / 1000 ; this . tokens = Math . min ( this . capacity , this . tokens + elapsedSec * this . refillRate ); this . lastRefill = now ; } take ( cost = 1 ) { this . _refill (); if ( this . tokens >= cost ) { this . tokens -= cost ; return { ok : true , remaining : Math . floor ( this . tokens ) }; } const deficit = cost - this . tokens ; const retryAfter = Mat
开发者
Redeploying Fable 5
AI 资讯
Memory Chips
Memory Chips Supply chain strategy from electronics production engineering, 500–50k units/year Introduction "Order from Digi-Key" is a prototyping strategy, not a production strategy. The 2020–2023 IC shortage demonstrated that supply chain resilience must be designed in — not improvised when lead times hit 52 weeks. The Sourcing Tier Structure Tier Examples MOQ Price Premium Lead Time Risk Authorized dist. Digi-Key, Mouser, Newark 1 pc +25–40% 1–3 days (stock) Lowest Franchise dist. Arrow, Avnet, TTI 100–1k Baseline 2–8 weeks Low Manufacturer direct TI, Infineon, ST portals 1k–10k+ −10 to −30% 8–20 weeks Low Regional aggregators IC-Online, local dist. Mixed Variable Variable Medium Spot market Brokers, eBay 1 pc +50 to +500% Days High Never use spot market for ICs without incoming inspection. Counterfeit STM32, ESP32, and common analog ICs are well-documented. Volume Pricing Reality Illustrative for a $2.50 MCU: Volume Digi-Key Arrow/Avnet Manufacturer Direct 100 $3.10 $2.65 N/A 1,000 $2.75 $2.15 $1.85 10,000 $2.40 $1.70 $1.25 50,000 $2.10 $1.40 $0.90 The franchise/direct savings are material at 1k+ units. Establishing Arrow or Avnet relationships pays for the admin overhead within 2 production cycles. BOM Resilience Framework For each critical component, document: Primary source : authorized distribution or direct Secondary distributor : alternative channel for same part Alternate part : functionally equivalent, different manufacturer, validated Buffer stock : target weeks at production rate Lead time worst-case : historical peak, not current During normal periods: 4-week buffer, one secondary source, one qualified alternate. For 5+ year product lifecycles: qualify the alternate before you need it. Practical Sourcing Mix: 500–5k Units/Year Component Type Primary Secondary Notes Commodity passives Digi-Key/Mouser + Yageo/Walsin Arrow Annual pricing agreements MCUs < $3 Arrow direct IC-Online for gap fills 90-day POs, buffer stock MCUs $3–$10 Manufacturer direct + A
AI 资讯
Web Scraping with Python in 2026: Best Libraries and Anti-Bot Strategies
Web Scraping with Python in 2026: Best Libraries and Anti-Bot Strategies Web scraping in 2026 looks very different from 2020. Sites are smarter, anti-bot systems are more aggressive, and the legal landscape has evolved. Here's what actually works now. The 2026 Scraping Landscape Challenge 2020 Solution 2026 Solution Bot detection Rotate User-Agent Fingerprint randomization + residential proxies CAPTCHAs Manual solving Turnstile/hCaptcha solvers JavaScript rendering Selenium Playwright (faster, more reliable) Rate limiting Sleep between requests Adaptive pacing + request signing IP blocking VPN rotation Residential proxy pools Best Libraries in 2026 1. Playwright (Best for JS-heavy sites) from playwright.sync_api import sync_playwright def scrape_with_playwright ( url ): with sync_playwright () as p : browser = p . chromium . launch ( headless = True ) page = browser . new_page () page . goto ( url , wait_until = " networkidle " ) data = page . query_selector_all ( " .job-item " ) results = [] for item in data : title = item . query_selector ( " h2 " ). text_content () results . append ( title ) browser . close () return results 2. httpx + Selectolax (Fast, no JS needed) import httpx from selectolax.parser import HTMLParser def scrape_static ( url ): resp = httpx . get ( url , headers = { " User-Agent " : " Mozilla/5.0 " }) tree = HTMLParser ( resp . text ) for node in tree . css ( " .listing " ): print ( node . text ()) 3. API-First Approach (Always check first!) Many sites have hidden or public APIs that make scraping unnecessary: url = " https://www.freelancer.com/api/projects/0.1/projects/active/?query=python " data = httpx . get ( url ). json () Anti-Bot Strategies That Work 1. Request Fingerprint Randomization import random def get_random_headers (): browsers = [ " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " , " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 " , ] return { " User-Agent " : random . choice ( browsers ), " A
AI 资讯
GitHub Trending Digest — 2026-06-30
GitHub Trending Digest: Optimasi Agent, Parsing Gambar Skala Besar, dan Evolusi Sistem Operasi Selamat datang di edisi digest GitHub Trending minggu ini (30 Juni 2026). Pasar pengembangan perangkat lunak di tengah tahun 2026 menunjukkan pergeseran menarik dari sekadar "membuat model AI lebih pintar" menjadi "membuat sistem AI lebih efisien dan terintegrasi secara mendalam". Tren utama minggu ini didominasi oleh dua tema besar. Pertama, optimasi biaya dan komputasi untuk AI Agents . Kita melihat alat-alat yang berfokus pada pengurangan latency dan peningkatan efektivitas kode yang dihasilkan, dengan filosofi bahwa kode terbaik adalah kode yang tidak perlu ditulis sama sekali. Kedua, kemampuan pemrosesan visual skala enterprise yang melampaui batas konvensi image-to-text tradisional, memungkinkan parsing dokumen kompleks dalam satu langkah ( one-shot ). Di sisi infrastruktur, ada gerakan balik menuju sistem operasi yang minimalis dan deterministik, yang ditunjukkan oleh meningkatnya minat terhadap dokumentasi dan basis kode dari proyek Astrid OS. Berikut adalah lima repository paling populer minggu ini yang merefleksikan tren tersebut. 1. DietrichGebert/ponytail (JavaScript) Star: 68,413 | Tagline: Makes your AI agent think like the laziest senior dev. Repository ponytail telah mengambil alih posisi puncak dengan jumlah bintang yang sangat signifikan. Seperti namanya, alat ini bekerja untuk membuat agen AI berpikir seperti "senior developer termalas" di ruangan tersebut. Filosofi intinya sederhana namun revolusioner: The best code is the code you never wrote (Kode terbaik adalah kode yang tidak pernah Anda tulis). Kenapa Trending? Di era di mana penggunaan LLM untuk generating code sudah menjadi standar, bottleneck baru muncul: hasil generate yang terlalu verbose, kurang efisien, atau bahkan redundan. Ponytail bertindak sebagai lapisan optimasi yang agresif. Alat ini tidak hanya menghasilkan kode, tetapi juga meragukan kebutuhan akan kode tersebut, mencari celah untuk
AI 资讯
How We Translate 300-Page Books Using Claude Without Hitting Token Limits
Breaking long documents into overlapping chunks, preserving context, and reassembling with FastAPI At LectuLibre, we’ve built an AI‑powered platform that translates entire books—EPUBs and PDFs—using large language models. When we first hooked up Claude’s API, we naively fed it a 300‑page PDF in one request. It failed immediately. Claude 3 Opus has a 200K token window, but a 300‑page book can easily run to 300K tokens or more. Even if we squeezed it in, the output would be truncated and the quality would degrade at the extremes of the context window. So we faced a classic long‑document problem: how do you translate a book that’s larger than the model’s context window? Here’s the real approach we ended up with, the code we wrote, and the lessons we learned. The Problem: Token Limits Are Real Claude 3 Opus and Haiku models (and most LLMs) have a maximum context length—200,000 tokens for Opus. A token is roughly ¾ of a word. A 300‑page novel with ~75,000 words translates to about 100K tokens, so it should fit, right? But translations from English to Spanish can expand by 15–20%, and the prompt instructions, system message, and the user message itself all eat into that budget. Plus, we needed to send the entire source text in every call to give the model full context. That’s not feasible. We could have tried a simple split: cut the book at arbitrary page boundaries and translate piecemeal. That fails spectacularly. Narrative breaks mid‑sentence, and phrases like “the previous chapter” lose their referents. We needed a more intelligent chunking strategy. Our Approach: Sliding Window with Overlapping Paragraphs We settled on a sliding window chunking algorithm based on paragraphs, with a generous overlap. Here’s the idea: Split the source text into paragraphs (using \n\n ). Build chunks of max_chunk_tokens (we used 180,000 to keep a safety margin), adding paragraphs one by one and counting tokens with tiktoken . When the chunk exceeds the limit, we start a new chunk but we
开发者
Medicare starts covering GLP-1 drugs for weight loss
开发者
ArXiv's Next Chapter
AI 资讯
[D] Monthly Who's Hiring and Who wants to be Hired?
For Job Postings please use this template Hiring: [Location], Salary:[], [Remote | Relocation], [Full Time | Contract | Part Time] and [Brief overview, what you're looking for] For Those looking for jobs please use this template Want to be Hired: [Location], Salary Expectation:[], [Remote | Relocation], [Full Time | Contract | Part Time] Resume: [Link to resume] and [Brief overview, what you're looking for] Please remember that this community is geared towards those with experience. submitted by /u/AutoModerator [link] [留言]
开发者
An Blackhole Simulator in Browser
开发者
Supersonic flight returning to US after half-century ban
https://www.faa.gov/newsroom/trumps-transportation-secretary...
开发者
Fixing a kubelet memory leak in Kubernetes 1.36
开发者
New Tesla 'Full Self-Driving' class action hilariously cites Electrek
AI 资讯
Wayve launches $85M employee tender offer at $8.5B valuation
Wayve’s offering is part of a growing trend of AI startups using employee tenders as a strategic tool to attract and retain talent.
开发者
The Family Keeping Watch over a 52-Year-Old Pot of Soup
开发者
The Department of Commerce has lifted export controls on Fable 5 and Mythos 5
开发者
Americans see their country's past, present and future
开发者
Forestiere Underground Gardens
产品设计
Beyond Happy Path Engineering: the Network
What happens when network calls stop behaving like clean request/response interactions. Timeouts, retries, duplicate side effects, idempotency, backoff, circuit breakers, load shedding, degraded states, observability, etc. submitted by /u/OtherwisePush6424 [link] [留言]
开发者
Show HN: Coding agent that compiles intent into deterministic DAG before running