今日已更新 350 条资讯 | 累计 25009 条内容
关于我们

标签:#Product

找到 1706 篇相关文章

AI 资讯

Cách khôi phục Collections Postman khi bị khóa tài khoản

Tóm tắt Nếu thay đổi gói miễn phí của Postman khiến bạn mất quyền truy cập vào workspace được chia sẻ, dữ liệu của bạn chưa chắc đã bị xóa. Việc cần làm là phục hồi càng sớm càng tốt trước khi cache cục bộ, quyền API hoặc bản sao lưu còn sót lại không còn dùng được. Bài viết này hướng dẫn các cách lấy lại collection/environment từ Postman và nhập chúng sang Apidog để giảm rủi ro bị khóa dữ liệu trong tương lai. Dùng thử Apidog ngay hôm nay Bối cảnh Sau bản cập nhật gói miễn phí Quý 1 năm 2026 của Postman, nhiều developer dùng workspace chia sẻ với đồng nghiệp phát hiện rằng họ không còn truy cập được dữ liệu nhóm. Các collection nằm trong workspace team, thay vì workspace cá nhân, đột nhiên bị khóa sau paywall. Một developer mô tả trên Reddit: “Tôi đến làm việc vào thứ Hai và toàn bộ không gian làm việc của nhóm tôi đã biến mất. Ba tháng với các bộ sưu tập, môi trường được sắp xếp gọn gàng, tất cả đều biến mất. Chỉ còn cách trả tiền thì mới có lại.” Điểm quan trọng: dữ liệu thường không bị xóa ngay. Postman lưu dữ liệu workspace phía server, còn việc bạn không nhìn thấy collection là hạn chế quyền truy cập. Vì vậy, hãy xử lý theo thứ tự dưới đây, ưu tiên các nguồn có khả năng còn dữ liệu đầy đủ nhất. 1. Kiểm tra cache trong ứng dụng Postman desktop Trước tiên, mở Postman desktop app nếu bạn đã từng dùng nó. Không mở bản web tại app.getpostman.com . Ứng dụng desktop có thể còn cache cục bộ của collection và environment bạn truy cập gần đây. Cache này thường chỉ tồn tại trong thời gian ngắn, tùy hệ thống và cơ chế invalidation của Postman, nên hãy xuất dữ liệu ngay nếu còn nhìn thấy. Các bước thực hiện: Mở Postman desktop. Kiểm tra tab History để xem các request gần đây. Kiểm tra sidebar bên trái xem collection còn hiển thị không. Nếu collection còn hiển thị, xuất ngay từng collection. Cách export collection: Nhấp chuột phải vào collection hoặc bấm menu ba chấm. Chọn Export . Chọn định dạng Collection v2.1 . Lưu file .json ra thư mục an toàn. Nếu collection vẫn hiển t

2026-06-09 原文 →
AI 资讯

How to Recover Postman Collections After Being Locked Out

TL;DR If Postman’s 2026 Q1 free plan change blocked access to shared collections, your data may still be recoverable. Start with your Postman desktop cache, then check exports, admins, the Postman API, and logs. Once you recover the JSON files, import them into Apidog so your team has a safer workflow going forward. Try Apidog today Introduction After Postman’s 2026 Q1 free tier update, many developers found that shared workspaces were no longer accessible on the free plan. Collections that lived in team workspaces, instead of personal workspaces, became locked behind a paid plan. One developer described it on Reddit: “I came in on Monday and my whole team workspace was gone. Three months of organized collections, environments, all of it. Just gone unless we pay.” In most cases, the data is not immediately deleted. Postman stores workspace data server-side, and the issue is usually access restriction rather than deletion. That said, recovery is time-sensitive because local cache, API access, and workspace availability may not last. Use the steps below in order. 1. Check the Postman desktop app cache first Start with the Postman desktop app, not the web app. The desktop app may still have cached copies of recently opened collections and environments. Even if your server-side access is revoked, the local cache can sometimes keep enough data available to export. Steps Open the Postman desktop app. Do not use the web app at app.getpostman.com . Check the left sidebar for your collections. Open the History tab to confirm which endpoints you recently used. If collections are visible, export them immediately. To export a collection: Right-click the collection or open the three-dot menu. Select Export . Choose Collection v2.1 . Save the file locally. Repeat for every visible collection. If the collection appears but export fails, try working offline: Click your avatar in the top-right corner. Select Go Offline . Retry the export. Going offline can prevent the app from refre

2026-06-09 原文 →
AI 资讯

Why SQLite FTS5's default tokenizer drops your Japanese substrings (and the one-line fix)

If you're building any kind of personal-memory layer on top of SQLite — Claude Code conversation history, notes app, indexed knowledge base — there's a sharp edge in FTS5 that takes most people by surprise the first time they hit it. The default tokenizer ( unicode61 ) silently drops most Japanese substring queries. The fix is one line of SQL. But the failure mode is invisible enough that you can ship a personal search tool, use it for weeks, and never realize half your content is unreachable. This post walks through: The failure, reproducible in 20 lines of Python The one-line fix ( tokenize='trigram' ) and what it actually does under the hood A two-layer Git + SQLite design that uses this index in production for ~800 Claude Code conversations A separate FTS5 footgun around the - character that breaks time-blocking -style queries A free GitHub sample at the end if you want to run the same approach against your own data The failure, reproducible in 20 lines Spin up a fresh SQLite FTS5 table with the default settings and insert a single multilingual sentence: import sqlite3 conn = sqlite3 . connect ( " :memory: " ) conn . execute ( """ CREATE VIRTUAL TABLE notes USING fts5(content) """ ) conn . execute ( """ INSERT INTO notes(content) VALUES ( ' Tried time-blocking with the new 朝の運用フロー — ' ' the 9-11 slot worked but the 午後 part collapsed again. ' ) """ ) for q in [ " time " , " blocking " , " 朝の運用 " , " 午後 " ]: hits = conn . execute ( " SELECT count(*) FROM notes WHERE content MATCH ? " , ( q ,) ). fetchone ()[ 0 ] print ( f " { q !r} : { hits } hit(s) " ) Output: 'time': 1 hit(s) 'blocking': 1 hit(s) '朝の運用': 0 hit(s) '午後': 0 hit(s) Same row. Same content. English queries land, Japanese substring queries don't. That's not a bug, it's the default tokenizer behavior — and the default doesn't print a warning about it. The reason: unicode61 segments text on whitespace and unicode word-break properties. English words have spaces between them, so individual tokens are reco

2026-06-09 原文 →
AI 资讯

How I Configured Cursor to Stop Breaking My Codebase

If you use Cursor, Claude Code, or Windsurf daily, you've probably had this experience: You open a fresh chat, ask for a small fix, and twenty minutes later the AI has rewritten your API layer, added three new dependencies, and switched your data-fetching pattern "for consistency." The model isn't broken. It's contextless. Every new session starts from zero. It doesn't know your stack, your conventions, or the things it must never touch. So you spend the first ten minutes re-explaining — and the last hour undoing. Here's what fixed it for me. The real problem isn't prompts Most devs collect prompts. Notes app, Slack snippets, old chat threads. That helps for one-off tasks, but it doesn't solve the session problem. What you need is persistent context — rules that load automatically before you type anything. Two files do this: CLAUDE.md — read by Claude Code (and usable as project context elsewhere) .cursorrules — loaded by Cursor on every session (rename to .windsurfrules for Windsurf) Drop them in your project root. Done. What goes in a good config file A useful config is not ten lines of "use TypeScript and write clean code." That's too vague to change behavior. Mine include: Project structure — where pages, components, and API routes live Stack + versions — Next.js 14 App Router, not Pages; Zod; shadcn/ui Commands — npm run dev, npm run typecheck, npm run test Coding conventions — naming, import aliases, Server vs Client Components DO NOT section — the most important part (more on this below) Workflow notes — use @folder, prefer editing existing files, minimal diffs Here's an excerpt from the DO NOT section that saved me the most time: DO NOT — Critical Anti-Patterns Do NOT create a pages/ directory or use the Pages Router Do NOT rewrite the entire API layer — extend existing route handlers Do NOT add new npm dependencies without stating why Do NOT make drive-by refactors in unrelated files Do NOT fetch data in useEffect when Server Components can fetch directly T

2026-06-09 原文 →
AI 资讯

5 Claude API Errors That Cost Me Money (And How I Trapped Them)

Retry storms turned 1 timeout into 340 duplicate calls billed in 90 seconds Infinite tool loop ran 1,200 iterations before I noticed at 2am Partial stream cleanup stopped half-written DB writes corrupting records Trap every error class with a circuit breaker and a hard iteration cap Five Claude API errors quietly drained my account before I built guards around them. None of them threw a loud crash. They just kept billing while I slept. Here is exactly what broke, what it cost, and the traps I now run on every project. The Retry Storm That Billed 340 Times in 90 Seconds The most expensive mistake I made was naive retry logic. A single request timed out. My code caught the timeout and retried. The retry also timed out, so it retried again. Within 90 seconds I had fired 340 requests for one piece of work. The problem was that the Claude API had actually received and processed several of those requests. The timeout happened on my side waiting for the response, not on Anthropic's side. So I was paying for completed work I never saw, then paying again for the retry. My first version of the retry looked harmless. A while loop, a counter set to 5, a sleep of one second between attempts. The flaw was that the sleep was constant and the counter reset on every new job. Under load, jobs stacked, and each one spawned its own retry chain. That is how 1 timeout became 340 calls. The fix was exponential backoff with a hard ceiling and a request ID. I now generate a unique idempotency-style key per logical job and refuse to issue a second call for the same key until the first fully resolves or hard-fails. Backoff starts at 2 seconds and doubles up to 32 seconds, then gives up after 5 total attempts. attempt = 0 delay = 2 while attempt < 5 : try : return call_claude ( job_key ) except Timeout : attempt += 1 sleep ( delay + random_jitter ()) delay = min ( delay * 2 , 32 ) raise GiveUp ( job_key ) The jitter matters more than it looks. Without it, ten failed jobs all retry at the exact

2026-06-09 原文 →
AI 资讯

The Estimate That Became a Quote

I said "maybe a couple days" on a call last Tuesday. By Wednesday morning it was in a Jira ticket as "2 days." By Thursday afternoon somebody was checking in to see if we were tracking against the two day commitment. Nobody did anything wrong. The person who wrote it down was capturing what I said. The person checking in was doing their job. I was the one who said the words. The system worked exactly as designed. The system is the problem. Something Ive learned is that theres no such thing as a rough number in meetings today with all of the AI note takers... The moment you say a number out loud, it stops being a feeling and starts being a quote. The hedge in front of it doesnt survive the transcription. "Maybe" disappears. "Couple" gets rounded to a specific integer. "Give or take" is the first thing that hits the cutting room floor. What lands in the document is the number, naked, with no caveats and no error bars. Everyone in the meeting heard what you heard. They heard the hedge. They watched you wave your hands. They understood, in the moment, that you werent committing. But the document doesnt remember any of that. The document just remembers the number. And the document outlives the conversation, which is where all the nuance lived. Ive watched myself do this for years and I still get caught by it. Someone asks how long something will take. I want to be helpful. I want to seem confident. I want to keep the meeting moving. So I say a number. The number is approximately right, or at least I think it is, but I havent actually thought about it the way you would think about it if you were going to commit to it. By saying it out loud, Ive committed to it. The fix, if theres one, is to refuse the number. Not rudely. Just clearly. "I need to look at it before I give you a real number. I can have one for you by Friday." This works about half the time. The other half, somebody in the room is going to ask you for a ballpark anyway, and youre going to give them one, and t

2026-06-09 原文 →
AI 资讯

Automating Brazilian company verification for accountants and finance teams

If you work with Brazilian companies — as an accountant, credit analyst, or anyone processing PJ clients at scale — here's a practical automation approach using free public data. What you can verify automatically For any CNPJ, public data gives you: Situação cadastral : ATIVA, BAIXADA, INAPTA, SUSPENSA — critical for invoice validation Razão social : legal name for contract matching CNAE : is this company allowed to do what they claim? QSA : who are the actual partners/directors? Data abertura : how old is the company? The data 65M+ CNPJs from Receita Federal, indexed and searchable at Jurídico Online . Free. Also available as a Python package: pip install juridico-online from juridico_online import empresa_url , buscar_url # Get company page URL for a CNPJ url = empresa_url ( " 00.000.000/0001-91 " ) print ( url ) # https://juridicoonline.com.br/empresa/00000000000191 # Search by company or partner name search = buscar_url ( " Magazine Luiza " ) print ( search ) Checks worth automating 1. Situação ATIVA before accepting any invoice INAPTA or BAIXADA companies cannot legally issue NF-e. 2. CNAE vs service being billed A company with CNAE "comércio de alimentos" billing for software development is a red flag. 3. Company age vs contract value A 3-month-old company offering a R$500k contract deserves extra scrutiny. 4. Shared partners across suppliers If two suppliers share directors, that's a conflict of interest. Search partner names at juridicoonline.com.br to see all companies they control. Integration patterns ERP/AP : validate CNPJ status before releasing payment Onboarding : auto-fill razão social when client enters CNPJ Batch audit : cross-check your vendor list quarterly Monitoring : alert if a key supplier's CNPJ changes status The data is public, free, and updated regularly. No excuse to check manually at scale.

2026-06-09 原文 →
AI 资讯

I wanted to query Instagram data inside my AI coding assistant, so I wired up an MCP server for it

Been doing a lot of competitive research for clients lately — checking hashtag volumes, tracking top posts in a niche, that kind of thing. Kept switching between Claude Code and browser tabs to cross-reference stuff manually. Got annoying fast. Found hikerapi-mcp, a Model Context Protocol server that exposes 100+ Instagram endpoints as tools directly inside Claude Code. Figured I'd try it. Setup was straightforward. The one thing I did differently was keeping the API key out of config files entirely — passed it as an environment variable instead. Smaller attack surface if I accidentally commit something. Also filtered down the tool groups with HIKERAPI_TAGS because 100+ tools showing up in context is chaos. I only need hashtag search and competitor profile data, so I scoped it to just those. "env": { "HIKERAPI_KEY": "${HIKERAPI_KEY}", "HIKERAPI_TAGS": "User Profile,Post Details,Search,Hashtags,Stories" } One thing that tripped me up for a solid 20 minutes: HikerAPI runs on a prepaid model (credits in rubles). If your balance is zero, you get HTTP 402, not 401. I kept thinking my key was invalid and regenerated it twice before I figured out I just needed to top up. Once that was sorted, it actually works well. Now I can ask things like "what are the top 10 posts for #socialmediamarketing this week" or pull a competitor's recent content directly in the same session where I'm building the campaign strategy. Cuts out a lot of context switching. Repo if you want to check it out: github.com/subzeroid/hikerapi-mcp Wrote up the full setup with config details here if useful: https://dev.to/simrp360/querying-instagram-from-claude-code-wiring-up-hikerapis-mcp-server-57jf Anyone else using MCP servers for social data research? Curious what other setups people are running.

2026-06-09 原文 →
AI 资讯

Why You Underestimate Haiku

Most people pick a model the wrong way around. They look at the leaderboard, see Opus on top, and reach for it by default. Sonnet if they want to save money. Haiku almost never, because the name says "small." That habit costs you. For a lot of what you actually build, Haiku is the right call, and you're paying three to five times more for capability the task never uses. This post is about how to choose, and why Haiku should be your default more often than it is. The short version: don't start from "what's the best model." Start from "what does this task need." Most tasks don't need much. Comparison Here is the current lineup, with the numbers that matter when you're choosing. Haiku 4.5 Sonnet 4.6 Opus 4.8 Model ID claude-haiku-4-5 claude-sonnet-4-6 claude-opus-4-8 Input price (per 1M tokens) $1 $3 $5 Output price (per 1M tokens) $5 $15 $25 Context window 200K 1M 1M Max output 64K 64K 128K Best at speed, volume balance hardest reasoning Two things jump out. First, price . Haiku input is a fifth of Opus and a third of Sonnet. Output is the same ratio. If you send a million tokens through Opus for $25 and the same work would have been fine on Haiku, you spent $20 for nothing. And that gap is per request, so it compounds. A feature that runs ten thousand times a day on Opus instead of Haiku is not a rounding error. It is the difference between a feature that ships and one that gets cut for cost. Second, the context window . This is where Haiku gives something up: 200K tokens instead of 1M. That is the real tradeoff, and it points straight at when to use it. We'll come back to that. The mental model Stop ranking models. Rank tasks . Ask three questions about the task in front of you: Does it need real reasoning, or is it bounded? A task is bounded when a competent junior could do it from a clear spec without much judgment: pull these fields out, sort this into one of five buckets, rewrite this in a different tone, answer this from the text I gave you. A task needs reason

2026-06-09 原文 →