IT之家 4 月 18 日消息,消息源 Canon Rumors 今天发文,长期以来有传闻称,佳能将在经典胶片单反 AE-1 诞生 50 周年时推出一款复古相机,甚至型号可能是“RE-1”。不过从目前情报来看,佳能似乎并没有这种计划。 IT之家在此援引 Canon Rumors,佳能即将推出 EOS R8 Mark II 全画幅无反相机,可能会加入复古元素。 这意味着佳能将会为 R8 系列产品线分化两条路线:一条是偏视频拍摄的 EOS R8 V,有望下周发布;另一条则是主打复古设计的 R8 Mark II。 不过我们目前仍无法得知 EOS R8 Mark II 的具体规格。从逻辑上看,带复古设计的全画幅无反都不会失败。 事实上,佳能在上个月接受 Phototrend 采访时,被问及是否会纪念 AE-1 诞生 50 周年。官方当时回应道:“目前我们没有准备以特别的方式庆祝这一里程碑”。 佳能认为,复古数码相机存在诸多设计难点。首先相机设计不仅只是做个机身,还要让机身、镜头、配件整体协调。并且握持感、拨轮和按键布局等人机交互设计也在几十年间发生很大变化。 简单复刻老相机的外观未必能带来良好的现代体验 。 他表示,虽然市场对复古外观的需求确实存在, 但在推进之前必须充分评估技术难度与商业可行性 。 IT之家注:佳能 AE-1 是一台胶片单反相机,最初发布于 1976 年 4 月,是世界上第一台采用微处理器控制的量产单反相机,搭载 FD 卡口,支持快门优先自动曝光(S 挡 / Tv 挡),让大量普通用户无需掌握摄影知识就能拍出曝光正确的照片,被国内摄友与尼康 FM2、奥巴 OM-1、美能达 X700 并誉为“豆瓣四大神机”。 有趣的是,苹果前员工 Jim Reekes 曾透露,iPhone 手机按下快门的声音实际上来自他高中时买的佳能 AE-1。
4.18 出现无法mark的情况,其他功能一切正常(点赞、评论等) 求大佬解答一下,谢谢 6 个帖子 - 5 位参与者 阅读完整话题
各位能成功调用 Ark 模型的佬都是怎么配置的啊? 我这一直报 404 错误,也不知道怎么回事。 使用站点中的操练场就可以正常聊,不过它自认为是 gemini 我在 Codex 中的配置如下: model_provider = “myproxy” model = “glm-5.1” review_model = “glm-5.1” model_reasoning_effort = “high” model_verbosity = “high” disable_response_storage = true network_access = “enabled” windows_wsl_setup_acknowledged = true model_context_window = 256000 model_auto_compact_token_limit = 65536 [features] multi_agent = true [model_providers.myproxy] name = “MyProxy” base_url = “ https://windhub.cc/v1 ” wire_api = “responses” requires_openai_auth = true 其中 base_url 不加 /v1 就是 reconnect 5/5 然后报错了: stream disconnected before completion: stream closed before response.completed 哪位佬告诉我怎么搞?还是说 Ark 的不能用在 Codex CLI 中啊? 15 个帖子 - 7 位参与者 阅读完整话题
Article URL: https://saucybargain.com Comments URL: https://news.ycombinator.com/item?id=47813565 Points: 2 # Comments: 0
因为 Markdown 是你的想法和背景知识的载体,而 Code 只是 AI 烧 Token 就能产出的执行结果。真正值钱的不是写代码的能力,而是你脑子里的想法、多年积累的行业经验。AI 是能力的放大器,但放大器的前提是你得有东西可以被放大。 2 个帖子 - 2 位参与者 阅读完整话题
Small cli program I made to convert and modify bookmark files. Supports converting between json and netscape bookmark file format (default formatted exported by chrome/firefox). I created this because I have a lot of bookmarks across devices that I want to batch edit/delete and I can't always just directly modify the local browser db. Not many filters implemented so far, but I made it easy to add filters see: https://github.com/ediw8311xht/cl-bookmark-tool/blob/main/sr... Comments URL: https://news.ycombinator.com/item?id=47808543 Points: 1 # Comments: 0
(\ _ /) ( ・-・) /っ 和 Grok 4.20 的大力出奇迹 16 Agent 护法不同,4.3 是个更像 Genspark 智能体那种云 Computer 类型,就是可以写入文件、执行啥的。 不过这些其实御三家前端都可以,虽然像 Claude 模型本身只支持图文,但工具集成得很屌 ✓ ↑ 配额只是 Auto 层级的,未来应该也是多线程路线。 测试 Prompt(随便搜的头盔): 这是最新款的电饭煲头盔,请为这个产品设计一个酷炫的 Web 单页。文案、配图、交互全都交由你来自主决定(使用网上现有的或使用 AI 生图都可以)。 (\ _ /) ( ・-・) /っ Grok 写的前端: 银河 · 电饭煲头盔 | 2026 赛博厨房战甲 完成度很高,虽然产品完全理解翻反了。˃̣̣̥᷄⌓˂̣̣̥᷅ 让世界首富去理解什么是电摩头盔太为难了。 15 个帖子 - 12 位参与者 阅读完整话题
英伟达执行长黄仁勋在 Dwarkesh Podcast 节目中反驳美国强化对中国芯片设备出口管制的主张,反对进一步限制对中国出口。他指出,中国具备庞大能源资源,可透过扩大产能弥补制程差距,因此中国无法自主发展 AI 芯片的说法“毫无根据”。黄仁勋强调,美国不该放弃全球第二大的算力市场,若迫使中国加速建立本土 AI 技术系统,将损害美国科技领先地位。他批评,现行政策已间接推动中国芯片产业成长,并指出华为去年营收已创下历史新高。
I read HN every day, usually late at night and have seen people request a dark mode many times. Basically, I couldn't find one that I liked, so I built the one that I've always wanted. It's inspired by terminal and IDE themes. A few cool features: - j/k to move, Enter to open, v to cycle density, 1–9 to switch themes, Esc to close - Three density modes: compact, comfortable, and an immersive reading view - 8 terminal-inspired themes (dracula, solarized, monokai, one dark, etc.) - Article preview pane that pulls OG metadata so you can skim without leaving the feed Stack: vanilla TypeScript + Vite, Cloudflare Pages Functions, CapacitorJS for the iOS/Android wrappers. Android and iOS apps coming soon, if folks request it. Would especially appreciate feedback and upvotes. Thanks for reading this far! Comments URL: https://news.ycombinator.com/item?id=47807269 Points: 2 # Comments: 1
写了个benchmark想看看实际的速率区别。 测试-1 (点击了解更多详细信息) bench代码 (点击了解更多详细信息) config.json (点击了解更多详细信息) 2.7-highspeed在代码生成类别速度比文字快一点,而且如果涉及到中文tps就会变低。在设定maxtoken比较小的情况下速度也会打折扣。这个速度比率和价格感觉不如买非极速版了。这个约100TPS就很灵性,主打四舍五入。bench代码的计算不知道对不对,有懂得佬看看。 3 个帖子 - 2 位参与者 阅读完整话题
如题,很想寻找一个佬友一起共建一个agent,包括benchmark建立等等,个人还没有什么想法,想先找想要一起合作的佬友! 个人的一些介绍:获得过国家奖学金,华为杯国家级二等奖,蓝桥杯国家级三等奖。此前有一段多模态大模型方向和安全智能体的实习经历,目前同时有两篇 A 类会议论文在投。 1 个帖子 - 1 位参与者 阅读完整话题
帖子内容: 疑似 DeepSeek V4 技术报告的 benchmark泄露! 图中 的“DeepSeek-V4 技术报告”基准测试(Benchmark)数据,为我们揭示了当前顶尖 AI 大模型的最新竞争格局。从这份涵盖通用能力、推理数学、代码以及智能体(Agent)四大维度的成绩单来看,DeepSeek-V4 展现出了极强的统治力,而大模型的第一梯队也正在经历重新洗牌。 竞争格局:当前大模型梯队划分 从图表数据中,我们可以清晰地看到五款参评模型的实力分层: 领跑者:DeepSeek-V4在所有 12 项严苛测试中均斩获最高分(State-of-the-Art),实现了跨维度的全面压制。 最强追赶者:Gemini 3.1 Pro Preview在多项核心指标上紧咬榜首,并在绝大多数测试成绩中超越了 GPT-5.3,是目前这组对比中最具竞争力的对手。 第三梯队:GPT-5.3 与 Claude Opus 4.6两者互有胜负,依然保持着极高的水准,但在最顶尖的竞争中已稍显疲态。 基准线参照:GPT-4.1作为较早期模型的代表,其数据在这组对比中全面垫底,但也直观地印证了新一代模型技术跨越的幅度之大。 四大核心能力深度拆解 1. 综合常识与学科能力 (General) 核心数据:在极具挑战性的 MMLU-Pro 测试中,DeepSeek-V4 (91.2) 和 Gemini 3.1 Pro (90.0) 是唯二突破 90 分大关的模型。 行业洞察:跨学科的专家级知识问答对头部模型已不再是难题。GPT-5.3 (88.4) 和 Claude (86.7) 在这方面稍显落后,知识密度的竞争正在向 90+ 的极限逼近。 2. 数学与复杂推理 (Reasoning & Math) 核心数据:顶尖数学竞赛基准 AIME 2025 呈现极度“内卷”的态势(DeepSeek-V4 96.4,Gemini 95.0,GPT-5.3 94.6)。 行业洞察:数学是 AI 进步最神速的领域。90+ 的得分意味着这些模型在解决人类高难度奥数题时已经具备了压倒性的优势,各家在这个领域的差距往往只在几道题之间。 3. 编程与工程能力 (Code) 核心数据:在 Codeforces(算法竞赛平台)上,DeepSeek-V4 飙升至 2767 分,拉开显著差距;但在评估修复真实软件工程 Bug 的 SWE-bench Verified 中,所有模型均未突破 60%(最高为 DeepSeek-V4 的 59.6%)。 行业洞察:“写算法题容易,改人类代码难”。模型在纯逻辑生成上已经达到竞赛级选手水平,但在理解和修改复杂的现实商业代码库时,依然存在明显的短板。 4. 智能体自主行动 (Agent) 核心数据:在模拟网页浏览和执行任务的 WebArena 测试中,全场最高分(DeepSeek-V4)仅为 58.7,GPT-4.1 甚至低至 44.8。 行业洞察:这是全表绝对得分最低的板块。它反映了当前的行业痛点:大模型“做题”和“写文章”能力极强,但如果让它像人类一样自主操作浏览器、跨应用处理多步骤现实任务,成功率依然堪忧。 核心总结这份基准测试不仅是 DeepSeek-V4 强悍实力的“肌肉秀”,也侧面印证了 Gemini 3.1 Pro Preview 在当前技术路线上的极强竞争力。更重要的是,它为行业指明了下一步的攻坚方向——当模型的知识储备和做题能力逼近人类极限时,突破“智能体自主执行 (Agentic tasks)”的现实应用瓶颈,将是决定下一代 AI 霸权的关键。 仅针对图中数据解读,真实情况还有待验证! 6 个帖子 - 6 位参与者 阅读完整话题
Article URL: https://github.com/darkvolg/trendrider-strategy Comments URL: https://news.ycombinator.com/item?id=47803765 Points: 2 # Comments: 0
IT之家 4 月 17 日消息,在做客 Dwarkesh Patel 播客节目时,英伟达首席执行官黄仁勋反驳 AI 威胁论,尖锐批评 AI 行业的过度炒作, 认为 AI 并非“核弹”,也不会取代所有软件工程岗位。 黄仁勋明确反对将 AI 比作核武器, 认为这种恐吓式宣传只会让公众对 AI 产生敌意与恐惧,最终损害美国的科技竞争力。 IT之家援引视频内容, 黄仁勋强调如果社会因恐惧 AI 取代人类,而停止培养软件工程师,这才是真正的行业危机。 针对就业焦虑,黄仁勋再次反驳了 AI 将消灭所有软件工程岗位的观点。多家软件公司此前因市场担忧 AI 颠覆行业而导致股价受挫, 黄仁勋则认为这种恐慌缺乏依据。 他主张应理性看待技术进步,而非因噎废食。
Pull a google doc in markdown format. Edit the markdown and push. ExtraSuite will figure out the diff and apply them to the google doc, respecting your formatting. Comments URL: https://news.ycombinator.com/item?id=47802733 Points: 2 # Comments: 1
从 有没有什么办法能让AI读本站文章 继续讨论: 最近在看一些帖子也有类似需求,方便跟AI 讨论,就顺手让Claude 撸了一个。用的是Discourse 自带的功能: 有没有什么办法能让AI读本站文章 开发调优 Discourse 的话,可以通过替换链接拿到markdown 格式的内容,直接复制给AI 会更好 比如这个帖子的链接是:https://linux.do/t/topic/1984943,把t/topic/替换成raw/ : https://linux.do/raw/1984943 需要分页加:?page=1 脚本会在主贴和最后的回复出新增一个 按钮,点击导出成markdown 格式的文件。 性能开销应该比较小,不会对网站造成什么负担 [1] ,当然你也可以用的时候再收到打开脚本。 篡改猴: // ==UserScript== // @name Linux.do 导出 Markdown // @namespace https://linux.do/ // @version 0.0.4 // @description 在 linux.do 帖子页面所有 topic-map 处新增「导出 MD」按钮,将帖子内容导出为 Markdown 文件 // @author hwang // @match https://linux.do/t/topic/* // @grant GM_xmlhttpRequest // @connect linux.do // @run-at document-idle // ==/UserScript== (function () { 'use strict'; // ── 工具函数 ────────────────────────────────────────────────── function getTopicId() { const m = location.pathname.match(/\/t\/[^/]+\/(\d+)/); return m ? m[1] : null; } function getCurrentPage() { const p = new URLSearchParams(location.search).get('page'); return p ? parseInt(p, 10) : 1; } function getTopicTitle() { const el = document.querySelector('h1.fancy-title, h1[data-topic-id], .topic-title h1, .fancy-title'); return el ? el.textContent.trim() : `topic-${getTopicId()}`; } function safeFilename(name) { return name.replace(/[\\/:*?"<>|]/g, '_').replace(/\s+/g, '_').slice(0, 100); } function fetchRaw(topicId, page) { return new Promise((resolve, reject) => { let url = `https://linux.do/raw/${topicId}`; if (page && page > 1) url += `?page=${page}`; GM_xmlhttpRequest({ method: 'GET', url, onload(res) { if (res.status === 200) resolve(res.responseText); else reject(new Error(`HTTP ${res.status}: ${url}`)); }, onerror(err) { reject(new Error('网络错误: ' + JSON.stringify(err))); }, }); }); } function downloadText(filename, content) { const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' }); const url = URL.createObjectURL(blob); const a = Object.assign(document.createElement('a'), { href: url, download: filename }); document.body.appendChild(a); a.click(); setTimeout(() => { URL.revokeObjectURL(url); a.remove(); }, 1000); } // ── 弹窗 UI ─────────────────────────────────────────────────── function createModal() { const overlay = document.createElement('div'); Object.assign(overlay.style, { position: 'fixed', inset: '0', background: 'rgba(0,0,0,.55)', zIndex: '99998', display: 'flex', alignItems: 'center', justifyContent: 'center', }); const box = document.createElement('div'); Object.assign(box.style, { background: '#1e2229', color: '#d4d7dc', borderRadius: '10px', padding: '28px 32px', width: '360px', boxShadow: '0 8px 32px rgba(0,0,0,.6)', fontFamily: 'inherit', position: 'relative', zIndex: '99999', }); box.innerHTML = ` <h3 style="margin:0 0 18px;font-size:16px;color:#fff;">📥 导出 Markdown</h3> <label style="display:block;margin-bottom:10px;font-size:13px;"> 导出范围 <select id="ld-export-mode" style="display:block;width:100%;margin-top:6px;padding:7px 10px; background:#2c3038;border:1px solid #404552;border-radius:6px;color:#d4d7dc;font-size:13px;cursor:pointer;"> <option value="first">仅第 1 页(默认)</option> <option value="current">当前页</option> <option value="custom">指定页码</option> <option value="all">全部页(逐页合并)</option> </select> </label> <div id="ld-custom-wrap" style="display:none;margin-bottom:10px;"> <label style="font-size:13px;">页码 <input id="ld-custom-page" type="number" min="1" value="1" style="display:block;width:100%; margin-top:6px;padding:7px 10px;background:#2c3038;border:1px solid #404552; border-radius:6px;color:#d4d7dc;font-size:13px;box-sizing:border-box;" /> </label> </div> <div id="ld-status" style="font-size:12px;color:#9ba0ab;min-height:20px;margin-bottom:14px;"></div> <div style="display:flex;gap:10px;justify-content:flex-end;"> <button id="ld-cancel-btn" style="padding:8px 18px;border-radius:6px;border:1px solid #404552; background:transparent;color:#9ba0ab;cursor:pointer;font-size:13px;">取消</button> <button id="ld-export-btn" style="padding:8px 18px;border-radius:6px;border:none; background:#0088cc;color:#fff;cursor:pointer;font-size:13px;font-weight:600;">导出</button> </div> `; overlay.appendChild(box); document.body.appendChild(overlay); const modeSelect = box.querySelector('#ld-export-mode'); const customWrap = box.querySelector('#ld-custom-wrap'); const customInput = box.querySelector('#ld-custom-page'); const statusEl = box.querySelector('#ld-status'); const exportBtn = box.querySelector('#ld-export-btn'); const cancelBtn = box.querySelector('#ld-cancel-btn'); modeSelect.addEventListener('change', () => { customWrap.style.display = modeSelect.value === 'custom' ? 'block' : 'none'; if (modeSelect.value === 'current') customInput.value = getCurrentPage(); }); const closeModal = () => overlay.remove(); cancelBtn.addEventListener('click', closeModal); overlay.addEventListener('click', e => { if (e.target === overlay) closeModal(); }); exportBtn.addEventListener('click', async () => { const topicId = getTopicId(); if (!topicId) { statusEl.textContent = '❌ 无法解析 Topic ID'; return; } exportBtn.disabled = true; exportBtn.textContent = '导出中…'; statusEl.textContent = ''; try { const mode = modeSelect.value; const title = getTopicTitle(); let content = ''; if (mode === 'first') { statusEl.textContent = '正在拉取第 1 页…'; content = await fetchRaw(topicId, 1); } else if (mode === 'current') { const p = getCurrentPage(); statusEl.textContent = `正在拉取第 ${p} 页…`; content = await fetchRaw(topicId, p); } else if (mode === 'custom') { const p = parseInt(customInput.value, 10) || 1; statusEl.textContent = `正在拉取第 ${p} 页…`; content = await fetchRaw(topicId, p); } else if (mode === 'all') { const parts = []; let page = 1; while (true) { statusEl.textContent = `正在拉取第 ${page} 页…`; let text; try { text = await fetchRaw(topicId, page); } catch (e) { break; } if (!text || text.trim() === '') break; parts.push(`<!-- Page ${page} -->\n${text}`); if (page > 1 && parts[page - 1].trim() === parts[page - 2].trim()) { parts.pop(); break; } page++; await new Promise(r => setTimeout(r, 300)); } content = parts.join('\n\n---\n\n'); } if (!content) { statusEl.textContent = '⚠️ 未获取到内容,请确认页码是否有效'; return; } const filename = `${safeFilename(title)}.md`; downloadText(filename, content); statusEl.style.color = '#4caf50'; statusEl.textContent = `✅ 已下载:${filename}`; setTimeout(closeModal, 1500); } catch (err) { statusEl.style.color = '#f44336'; statusEl.textContent = '❌ ' + err.message; } finally { exportBtn.disabled = false; exportBtn.textContent = '导出'; } }); } // ── 注入按钮 ────────────────────────────────────────────────── function findButtonContainer(topicMap) { for (const sel of ['.topic-map__buttons', '.topic-footer-main-controls', '.buttons']) { const el = topicMap.querySelector(sel); if (el) return el; } const summarizeBtn = topicMap.querySelector( '.summarize-topic, button.create-summary, button.topic-map__summarize-btn, button' ); if (summarizeBtn) return summarizeBtn.parentElement; const children = [...topicMap.children].filter( el => el.tagName === 'DIV' || el.tagName === 'SECTION' ); return children.length ? children[children.length - 1] : null; } function createButton() { const btn = document.createElement('button'); btn.className = 'ld-export-md-btn'; btn.textContent = '⬇ 导出 MD'; // 获取参考样式(只在创建时获取一次) const refBtn = document.querySelector('.topic-map button'); const refStyle = refBtn ? getComputedStyle(refBtn) : null; Object.assign(btn.style, { padding: '6px 14px', borderRadius: refStyle ? refStyle.borderRadius : '6px', border: '1px solid #404552', background: '#2c3038', color: refStyle ? refStyle.color : '#d4d7dc', cursor: 'pointer', fontSize: refStyle ? refStyle.fontSize : '13px', fontWeight: '600', marginRight: '8px', verticalAlign: 'middle', transition: 'background .2s', flexShrink: '0', }); btn.addEventListener('mouseover', () => btn.style.background = '#3a3f4b'); btn.addEventListener('mouseout', () => btn.style.background = '#2c3038'); return btn; } function injectButton(topicMap) { if (topicMap.querySelector('.ld-export-md-btn')) return false; const container = findButtonContainer(topicMap); if (!container) return false; const btn = createButton(); container.insertBefore(btn, container.firstChild); return true; } // ── 性能优化核心:Intersection Observer + 事件委托 ────────── const injectedMaps = new WeakSet(); // 使用事件委托,只绑定一次 document.body.addEventListener('click', (e) => { if (e.target.classList.contains('ld-export-md-btn')) { e.preventDefault(); e.stopPropagation(); createModal(); } }); // Intersection Observer:只在元素可见时注入 const intersectionObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting && !injectedMaps.has(entry.target)) { if (injectButton(entry.target)) { injectedMaps.add(entry.target); // 注入成功后停止观察该元素 intersectionObserver.unobserve(entry.target); } } }); }, { threshold: 0.1, rootMargin: '50px' // 提前 50px 开始加载 }); // MutationObserver:只监听主内容区域,不监听整个 body let mutationTimer = null; const contentArea = document.querySelector('#main-outlet, #topic, .container.posts') || document.body; const mutationObserver = new MutationObserver(() => { if (mutationTimer) return; mutationTimer = setTimeout(() => { mutationTimer = null; // 只查找新出现的 topic-map const maps = contentArea.querySelectorAll('.topic-map'); maps.forEach(map => { if (!injectedMaps.has(map)) { intersectionObserver.observe(map); } }); }, 800); // 较长的防抖时间 }); mutationObserver.observe(contentArea, { childList: true, subtree: true }); // 初始化:立即处理已存在的元素 document.querySelectorAll('.topic-map').forEach(map => { intersectionObserver.observe(map); }); // ── 路由跳转处理 ────────────────────────────────────────────── function cleanup() { intersectionObserver.disconnect(); mutationObserver.disconnect(); } function reinit() { cleanup(); // 重新初始化 const newContentArea = document.querySelector('#main-outlet, #topic, .container.posts') || document.body; mutationObserver.observe(newContentArea, { childList: true, subtree: true }); document.querySelectorAll('.topic-map').forEach(map => { if (!injectedMaps.has(map)) { intersectionObserver.observe(map); } }); } window.addEventListener('popstate', reinit); const _pushState = history.pushState.bind(history); history.pushState = function (...args) { _pushState(...args); setTimeout(reinit, 100); // 延迟等待 DOM 更新 }; })(); 仅对前端页面修改,也不会对服务器造成压力 ↩︎ 1 个帖子 - 1 位参与者 阅读完整话题
上图: 暂时可以用竞技场 roll 出来 Arena | Benchmark & Compare the Best AI Models Arena | Benchmark & Compare the Best AI Models Chat with multiple AI models side-by-side. Compare ChatGPT, Claude, Gemini, and other top LLMs. Crowdsourced benchmarks and leaderboards. 根据网上的讯息 出现以下模型可以确认是 image-2 duct-tape-* maskingtape-* 7 个帖子 - 6 位参与者 阅读完整话题
Hey HN, In this age of agentic coding I've found myself spending a lot of time reviewing markdown files. Whether it's plans or documentation that I've asked my agent to generate for me, it seems that I spend more time reading markdown than code. I've tried a few different solutions to make it easier to read such as Obsidian however I've found their Vault system to be quite limiting for this use case and I've found TUI solutions to not quite be as friendly to read as I've wanted so I made Marky. Marky is a lightweight desktop application that makes it incredibly easy to read and track your markdown files. It also has a helpful cli so you can just run marky FILENAME and have the app open to the md file that you pointed it at. I've been using the daily over the past week and I really enjoy it so I figured I'd share it. I have plans to add more features such as incorporating agentic tools such as claude code and codex into the UI as well as developing a local git diff reviewer to allow me to do local code review before pushing up to git. I'd love to hear your thoughts and any feature suggestions you may have :) Comments URL: https://news.ycombinator.com/item?id=47795468 Points: 2 # Comments: 0
使用:pip install polymarket-backtest 自己在写策略的时候顺便做了个python包,希望能帮助到大家 Most Polymarket tools focus on order execution. This library focuses on research and strategy evaluation : No API key needed for data fetching — Gamma API and CLOB price history are public Zero boilerplate — market discovery, token ID resolution, and DataFrame conversion in one call Real recorded data included — stop waiting to collect enough data to start backtesting Pure Python metrics — no optional C extensions; works in any environment 免鉴权 API 封装 :一键调用 Gamma 和 CLOB API,轻松获取实时赔率与历史价格。 内置实战数据集 :自带 BTC/ETH 订单簿快照及策略交易日志,安装即刻开始回测。 专业量化指标 :内置 Sharpe Ratio、最大回撤、盈亏比等核心指标,针对预测市场特性优化。 纯 Python 实现 :零配置成本,完美集成 Pandas/NumPy 生态。 1 个帖子 - 1 位参与者 阅读完整话题
gpt-5.2 gpt-5.3-codex gpt-5.4 gpt-5.4-mini gpt-5.3-codex-spark 3 个帖子 - 3 位参与者 阅读完整话题