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

标签:#m

找到 8848 篇相关文章

AI 资讯

I Built 23 PDF Tools That Don't Make You Sign Up, Pay, or Trust a Server

If you've ever used an online PDF tool, you know the routine. You need to merge two files. You find a site. You upload. Then: "Sign in to download." "Free plan: 2 tasks per day." "Your result is ready — with our watermark on it." "Upgrade to remove limits." A five-second job turns into an account, a countdown, and a branded output you can't send to a client. That's the friction that made me build PDFKing — 23 PDF tools in one place, with none of the catches. No sign-up. No watermarks. No daily limits. Nothing to install. The Problem With Most "Free" PDF Tools "Free" almost always has a shape: Free tier, capped at a couple of tasks a day Sign-in wall before you can download Watermark on the output unless you pay File-size limits that push you to a premium plan None of that is about the PDF. It's about converting a person in a hurry into an account. I wanted the opposite: open the tool, do the job, close the tab. No relationship required. The Approach A few principles shaped everything: Every common PDF job in one place — no bouncing between five single-purpose sites Name tools by what they do , not by how the code works Same short flow for all of them — pick, add file, run, download Nothing gatekept — no login, no watermark, no per-day counter What's Actually In It 23 tools, grouped by what you're trying to do. Organise & optimise Merge, Split, Compress, Organise pages, Delete pages, Extract pages, Rotate, plus an Image Compressor for JPG/PNG/WEBP. Convert to & from PDF PDF to Word, Word to PDF, HTML to PDF, JPG to PDF, PDF to JPG, PDF to Text. Secure & sign Watermark, Sign, Redact, Protect (password), Unlock. Edit Crop, Add page numbers, Edit PDF (text, shapes, highlights, annotations), Edit metadata. The ones people hit first: Merge PDF , Compress PDF , PDF to Word , and Sign PDF . Privacy Isn't a Feature, It's the Default With PDFKing: there's no account, so there's nothing to log against you [confirmed on site] there's no watermark added to anything you make [con

2026-07-29 原文 →
AI 资讯

Pavel Durov Is Wanted by Russia. Platform Builders Should Pay Attention

Russia’s conflict with Telegram is no longer limited to blocking attempts, fines or demands to remove content. On July 29, Russia’s Federal Security Service said it had charged Telegram founder Pavel Durov with aiding terrorist activity and placed him on an international wanted list. The FSB claims Telegram failed to remove channels, chats and bots allegedly used by Ukrainian intelligence services and extremist groups to coordinate attacks, sabotage and cybercrime inside Russia. Those are allegations made by Russian authorities. They have not been established by a court. That distinction matters, especially with a story moving this quickly. What has actually been confirmed Both Reuters and the Associated Press report that the FSB announced formal charges and an international wanted listing. What has not been publicly confirmed is an Interpol Red Notice. The terms are often treated as interchangeable in breaking-news coverage, but they are not the same thing. Interpol describes a Red Notice as a request for police worldwide to locate and provisionally arrest a wanted person. It is not an international arrest warrant, and each country decides what legal action it can take. That does not make the Russian case insignificant. It simply means developers, writers and users should avoid adding legal conclusions that the available evidence does not support. Moderation is part of the architecture The case is political, but the problem underneath it is familiar to anyone building a platform around user-generated content. Moderation is often described as a policy issue. In practice, much of it depends on product and engineering decisions: Can users report a specific message, account, bot or channel? Is there enough context for a moderator to review the report? Can repeated reports be grouped rather than handled separately? Are enforcement decisions logged? Can a decision be appealed? Who can access user information during an investigation? How are government requests received,

2026-07-29 原文 →
AI 资讯

Article: Securing MCP in Production: Defense-in-Depth Beyond the Gateway

This article presents a defense-in-depth approach for securing Model Context Protocol (MCP) deployments in production. It outlines four architectural control layers: safe execution, management infrastructure, outbound trust, and semantic integrity, arguing that production security requires enforcement beyond the gateway at the earliest trustworthy control points. By Nik Kale

2026-07-29 原文 →
AI 资讯

.NET 11 Preview 6 Modernises MAUI CollectionView and Android Shell

Microsoft has released .NET 11 Preview 6 with several architectural and reliability improvements for .NET MAUI. The update brings the next-generation CollectionView implementation to Windows, moves Android Shell toward the handler model, improves Native AOT compatibility, and adds recovery support for interrupted media-picker operations. By Edin Kapić

2026-07-29 原文 →
AI 资讯

How to Replace a Google Form With a Real HTML Form on Your Site

Most guides about Google Forms and your website answer a question you did not ask. Search for how to replace a Google Form with your own HTML and you get three kinds of answer. Embed the iframe but style the container. Use a service that hides Google's branding. Or the clever one: build your own HTML form and point it at Google's endpoint, so responses still land in your existing spreadsheet. All three keep Google Forms in the loop. If that is what you want, they work, and I will show you the third one because it is genuinely useful when you need it. But if you actually want the Google Form gone, replaced by markup you own, here is how that works and what it costs you. One-line summary: Google Forms does one thing your static site can't, accept a POST; swap that for a form endpoint and you get your markup back, at the cost of owning spam and losing free-unlimited. Why the iframe is the problem The embed is an iframe. That means: You cannot restyle it. Your fonts and colours stop at the border. It does not resize with its content, so a long form becomes a scroll area inside your page. It looks like Google on your site, because it is. You inherit its accessibility behaviour and can do nothing about it. None of that matters for an internal survey or a sports club sign-up sheet. It matters a lot on a business site, where a Google-branded iframe reads as a stopgap someone never got round to replacing. The clever workaround, and where it breaks You can POST your own HTML form straight at a Google Form's response endpoint. Open your form, inspect the page, dig the field IDs out of the markup, and build a form whose input names match: <form action= "https://docs.google.com/forms/d/e/YOUR_FORM_ID/formResponse" method= "POST" > <input name= "entry.1234567890" type= "email" required > <textarea name= "entry.9876543210" required ></textarea> <button type= "submit" > Send </button> </form> Responses land in the same spreadsheet. No new service. For a throwaway internal page, thi

2026-07-29 原文 →
AI 资讯

# What I Learned from Building with GIS Data and the Copernicus API at the KijaniSpace Hackathon

As software developers, we often spend most of our time building APIs, databases, authentication systems, and web applications. That's certainly been my focus recently, especially working with Go, JWT authentication, and backend services. Last week, however, I had the opportunity to participate in the KijaniSpace Hackathon , held at Zone01 Kisumu , and it introduced me to an entirely different side of software development. Our challenge was to build solutions using: Geographic Information Systems (GIS) The Copernicus API IoT devices where applicable It was an opportunity to see how software can interact with our physical world. What is GIS? GIS (Geographic Information Systems) is a technology used to collect, analyze, visualize, and manage data that has a geographic location. Imagine not just storing information like: Temperature Population Vegetation Buildings Roads ...but also knowing exactly where that information exists on Earth. That location data allows developers to build intelligent systems capable of answering questions like: Which farms are experiencing drought? Which roads are likely to flood? Which areas are losing forest cover? Where should new infrastructure be built? GIS transforms ordinary data into meaningful geographic insights. Discovering the Copernicus Program Before this hackathon, I had heard very little about Copernicus. Copernicus is the European Union's Earth Observation Programme. It provides free satellite imagery and environmental data collected by the Sentinel satellite missions. Through its APIs, developers can access information about: Land cover Vegetation health Weather patterns Water bodies Air quality Climate changes Disaster monitoring What amazed me most is that much of this data is openly available for developers to build impactful applications. Where IoT Fits In Some teams also explored Internet of Things (IoT) solutions. IoT devices can collect real-world information through sensors measuring: Soil moisture Temperature Humidi

2026-07-29 原文 →
AI 资讯

How to Rescue a Failed Odoo Implementation: A Consultant's Triage Playbook

The call usually comes about eleven months in. Go-live happened, sort of. Finance is still closing the month in a spreadsheet, the warehouse team keeps a parallel notebook, and someone has quietly stopped using the CRM entirely. The system technically works. Nobody trusts it. Odoo rarely fails because Odoo is bad software. It fails because the implementation encoded somebody's misunderstanding of the business into 40 custom modules, and now every fix breaks two things. Panorama Consulting's 2026 ERP Report still puts cost overruns and schedule slippage among the most persistent problems across ERP projects of every size — and in our experience the overrun is almost never in licensing. It's in the rework. Here's the triage sequence we actually run when we inherit a broken deployment, in the order we run it. Step 1: Read the database before you read the code Skip the codebase for a day. Open PostgreSQL and ask the system what people are really doing. A few queries tell you more than a week of stakeholder interviews: Row counts per model over time. If crm.lead stopped growing in March, sales abandoned the module in March. Nobody will volunteer this in a meeting. ir.model.fields where state = 'manual' . Every field created through Studio or a quick patch. A healthy mid-size deployment has a few dozen. We've opened databases with 900. That number is a direct measure of how much undocumented business logic is floating outside version control. stock.quant versus what the warehouse counts. Any gap here means inventory valuation is wrong, which means the P&L is wrong, which is usually the real reason finance went back to Excel. ir_cron last-run timestamps and failure counts. Silently dead crons are behind a surprising share of "the system doesn't update" complaints. Direct SQL writes. Grep the custom modules for self.env.cr.execute with UPDATE or INSERT . Every one of those bypasses the ORM, so computed fields never recomputed and stored values are now lying to you. This ste

2026-07-29 原文 →
AI 资讯

The Hidden Cost of a Log Line : Sync/Async Flush and everything in Between

log.info("user logged in") looks free. It isn't. Behind that one line is a chain of decisions — buffer or not, flush or not, block or drop, same thread or another — and each one trades latency , throughput , and durability against the others. This post walks the whole chain, from the method call down to the bytes hitting the disk platter. If you've ever wondered why your p99 latency has a mysterious spike, why logs vanish after a crash, or what "async logging" actually buys you, this is for you. First, the map: facade vs. implementation Java logging is a two-layer cake, and mixing up the layers is the #1 source of confusion. The facade is the API your code calls. The implementation is what actually writes the bytes. your code │ log.info(...) ▼ ┌───────────────────────────────┐ │ Facade: SLF4J (or Log4j2 API)│ ← the interface you compile against └──────────────┬────────────────┘ │ bound at runtime ┌───────────┼────────────┬──────────────┐ ▼ ▼ ▼ ▼ Logback Log4j2 Core java.util.logging ... (the engine that buffers, formats, and flushes) SLF4J — the de-facto standard facade. Your app should log against this. Logback — the reference SLF4J implementation. Solid, widely deployed. Log4j2 — the performance-focused implementation, famous for its lock-free async loggers. java.util.logging (JUL) — built into the JDK, rarely chosen on purpose. Why the split? So you can swap engines without touching a single log. call. Everything interesting in this post — the buffering, the flushing, the async magic — happens in the implementation layer. The anatomy of a single log call Before we talk flushing, let's see what one log.info(...) actually does. There are five stages: 1. Level check → is INFO enabled for this logger? (cheap, often the fastest bail-out) 2. Build LogEvent → capture message, timestamp, thread, MDC context, maybe a stack trace 3. Filter → run any configured filters 4. Layout / encode → turn the event into bytes ("2026-07-28 12:00:01 INFO ...") 5. Append → write those by

2026-07-29 原文 →
AI 资讯

The 8 Most Expensive Unit Conversion Mistakes in Engineering History — and the Software Bugs That Caused Them

TL;DR Eight engineering disasters. Zero arithmetic errors. Every single one was caused by two numbers — both correct, both carefully computed — meaning different things on opposite sides of a software interface. One cost $65 billion. Another killed 28 soldiers because 0.1 can't be represented in binary. The fix is never the math. The fix is the label. There is a particular kind of silence in a control room when someone realizes the number on the screen is in the wrong unit. It lasts about two seconds. Then it's replaced by the kind of noise nobody wants to hear. On September 23, 1999, that silence happened at the Jet Propulsion Laboratory in Pasadena, California. The Mars Climate Orbiter had just disappeared behind the planet. Telemetry showed the spacecraft at 57 kilometers above the surface. It was supposed to be at 140. The silence was four seconds long. Then someone said "oh no" — the official NASA transcript uses a stronger word — and $327 million of aluminum, titanium, and human effort disintegrated into the Martian atmosphere. What follows are eight stories about the same bug, wearing different uniforms. Some are famous. Some you've never heard of. Two of them are pure software failures that every developer who's ever written for (let i = 0; i < 10; i += 0.1) has come within a rounding error of replicating. 1. The Patriot Missile — When 0.1 Is Not 0.1 (1991) Let's start with the one that belongs in every CS curriculum. Because this isn't a "unit conversion" error in the traditional sense — nobody confused meters and feet. The error was in the way a computer counted time. And it killed 28 American soldiers in a warehouse in Dhahran, Saudi Arabia. The MIM-104 Patriot missile system tracks incoming targets using a phased-array radar. The radar scans the sky, and the fire-control computer predicts where the target will be when the interceptor arrives. That prediction depends on knowing exactly when the radar echo returned. Time is measured by the system's interna

2026-07-29 原文 →
AI 资讯

Excited to launch my latest full-stack project: NeighborHelp! 🤝✨

Have you ever been in a situation where you needed immediate help from someone nearby? Maybe you needed a blood donor, a local electrician, emergency transportation, pet care, or just someone in your neighborhood who could help quickly. Finding the right person at the right time isn't always easy. That's exactly why I built NeighborHelp — a modern community platform that helps people connect with nearby neighbors and provide or receive help in real time. 🌐 Live Demo: https://neighborhelp99.vercel.app 💡 What Makes NeighborHelp Special? 📍 Smart Location-Based Help NeighborHelp uses real-time location to show nearby help requests with distance filters like: Within 5 km Within 10 km Within 25 km Anywhere This makes finding nearby help simple and fast. 💬 Real-Time Chat Users can instantly communicate using a built-in chat system powered by Socket.io. Features include: Online status Live typing indicators Instant messaging Everything updates in real time without refreshing the page. 🔔 Instant Notifications Urgent requests shouldn't wait. NeighborHelp instantly sends: Web Push Notifications Automated Email Alerts so people can respond as quickly as possible. 🏆 Community Reputation System Helping others deserves recognition. The platform includes: 10-level badge system Reputation points Community success stories to encourage active participation and build trust. 🤖 NeighborBot AI Assistant An integrated AI assistant helps users by: Answering common questions Guiding new users Suggesting helpful actions Making the platform easier to use 🛡️ Secure Authentication Security was one of my top priorities while building this project. Features include: JWT Authentication Express Rate Limiting OTP-based Password Recovery Protected APIs 🛠️ Tech Stack Frontend Next.js 16 React Tailwind CSS Vanilla CSS Backend Node.js Express.js Socket.io Web Push API Database & Deployment Supabase PostgreSQL Vercel 💻 What I Learned Building NeighborHelp from scratch helped me gain hands-on experience wi

2026-07-29 原文 →
AI 资讯

How I Made My AI CSV Import Pipeline Reliable by Adding Validation Layers 🚀

This is a submission for DEV's Summer Bug Smash: Smash Stories powered by Sentry. When building AI-powered applications, the hardest part is not connecting an LLM API. The real challenge is making AI-generated output reliable enough to use in real-world workflows. While building GrowEasy AI-Powered CSV Importer, an AI-powered CRM lead import pipeline, I faced an important engineering challenge: How can we safely use AI-generated data when importing business records into a CRM? The application accepts lead data from different sources: 🔹 Facebook Lead Ads 🔹 Google Ads 🔹 CRM exports 🔹 Excel sheets 🔹 Custom spreadsheets Each source follows a different structure. The same field can have different names: phone mobile_number contact_no whatsapp_number The goal was to automatically understand these variations, map the columns correctly, and convert the data into a fixed CRM structure using Google Gemini. 🐛 The Challenge Initially, the workflow looked simple: CSV Upload ↓ AI Processing ↓ CRM Import But AI responses cannot always be treated as perfect structured data. Possible issues: ❌ Missing required fields ❌ Invalid values ❌ Incorrect formats ❌ Unexpected AI responses ❌ Incomplete lead records For example: A CSV file may contain: phone_number The AI can correctly understand that this represents a phone field, but there can still be problems: Missing phone values Invalid formats Incorrect mappings Incomplete records The problem was not the AI model itself. The problem was treating AI output as trusted data without an additional validation layer. 🔍 Finding the Root Cause The import pipeline needed a safety checkpoint before saving any data. Instead of: AI Response → Import The workflow needed to become: AI Response → Validation → Import The backend needed to remain the final source of truth. 🛠️ The Solution I added backend validation to verify every AI-generated result before importing it into the CRM. The improved workflow: CSV Upload ↓ CSV Parsing ↓ AI Column Mapping ↓ Va

2026-07-29 原文 →
AI 资讯

Two ceilings: taking a Go DNS server from 500 to 9,500 QPS

I run HydraDNS, an open-source DNS security gateway in Go. Last month I sat down to find out what one box could actually handle before I put it on anyone else's network. The plan had a rule I'd written for myself: every number we discover becomes either a sales claim or a fix ticket. No number, no claim. I expected to find one bottleneck. I found two, stacked on top of each other, and a third thing I wasn't looking for: a data structure in our own documentation that had never existed in the code. Everything below was measured on a 22-core dev machine with load generated inside the container, using dnspyre, so docker-proxy and host networking stay out of the numbers. It's not appliance hardware and I'm not making appliance claims. The shapes are what matter. The first ceiling: ~500 QPS, and it didn't care what I threw at it The first redline run capped at roughly 500 queries per second. Fine, servers have limits. What made it interesting was that the cap didn't move. Blocked queries: ~500. Cached queries that never touch upstream: ~500. Two code paths that do completely different work, hitting the same wall, with the CPU sitting under 30% of 22 cores. That signature is worth memorizing. When two very different paths hit the same ceiling and the CPU is bored, the bottleneck isn't in either path. It's in something they share, or something upstream of both. Ours was in the blocklist check. IsBlocked ran a SQL COUNT against a 92k-row blocklist_entries table on every query . Not just candidate blocks, every query, because the check sits in front of the cache, so even cache hits paid for it. And all of those reads were serialized through a single SQLite connection, MaxOpenConns=1 , which was also absorbing the async write traffic from query logging. The engine's self-measured latency under load: p50 of 50ms, p99 of 5000ms. Five full seconds at the tail, for DNS, which is supposed to be the fast part of the internet. The part where I found out our docs were lying Here's the

2026-07-29 原文 →