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

今日精选

HOT

最新资讯

共 29048 篇
第 175/1453 页
AI 资讯 Dev.to

# 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

Ouma Asoyoh 2026-07-29 14:51 7 原文
AI 资讯 Dev.to

How to Install and Configure the STON.fi SDK

Set up a TypeScript project, connect the required STON.fi and TON components, and prepare a reliable foundation for swaps and liquidity operations. Installing the STON.fi SDK requires more than adding one npm package. The SDK creates and opens the smart contract wrappers your application needs, but a complete integration usually also requires a TON RPC client, the STON.fi API, and a wallet connection layer. For a production swap application, these components work together. The STON.fi API discovers assets, simulates the trade, and returns the correct Router metadata. The SDK converts that information into contract instances and transaction parameters. TON Connect then asks the user's wallet to approve and send the transaction. The official SDK is written for JavaScript and TypeScript applications and acts as a thin wrapper around STON.fi contracts, including Router, Pool, LP Account, Vault, and pTON contracts. Key takeaways Install @ston-fi/sdk together with @ston-fi/api and @ton/ton . Add a TON Connect package when users will sign transactions through a wallet. Use the STON.fi API to simulate operations and discover the appropriate Router. Avoid hardcoding mainnet Router addresses in production integrations. Keep blockchain units, RPC access, wallet signing, and API data as separate layers. What the STON.fi SDK actually provides The SDK is the contract interaction layer of a STON.fi integration. It gives your application TypeScript classes and helper functions for working with STON.fi smart contracts without manually constructing cells, operation codes, and message bodies. Its main responsibilities include: creating Router and Pool contract wrappers preparing swap transaction parameters preparing liquidity deposit and withdrawal parameters opening LP Account and Vault contracts representing pTON when the native TON asset is involved converting API Router metadata into the correct contract classes The current v2 documentation covers newer contract functionality such

Ivan “Crypto Vazima” Zimanov 2026-07-29 14:51 5 原文
AI 资讯 Dev.to

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

Mohit 2026-07-29 14:48 8 原文
AI 资讯 Dev.to

How do you measure something that gives a different answer every time?

I had a simple-sounding question: does ChatGPT recommend this business? You'd think you just ask it. Ask ChatGPT "best personal injury law firm in NYC", see if the business is named, record yes or no. That works exactly once. Ask again an hour later and you might get a different answer. Not slightly different — potentially a completely different set of firms and a completely different set of cited sources. Which means the naive version of this measurement is worthless. You're not measuring visibility, you're sampling a distribution once and calling it a fact. This is the same problem anyone gets when they try to test an LLM-backed feature. Your normal testing instinct — same input, assert on output — just doesn't apply. So here's how I ended up designing around it, and the numbers that came out, which surprised me. The setup I wanted to compare four assistants (GPT-4o, Claude Haiku 4.5, Gemini 2.5 Flash, Perplexity Sonar, all with web search on) across 10 buyer-intent questions in one vertical. Something like: "Best personal injury law firm in New York City?" "Top immigration lawyers in Mumbai?" For each response I recorded two things: which businesses got named, and which URLs got cited. The cited sources come from each API's own citation metadata, so that part is structured — no scraping the prose. First pass, the results looked dramatic. The four assistants barely agreed on anything. Different firms, different sources, almost no overlap. Great finding. Except I couldn't publish it, because there was an obvious objection I couldn't answer: Maybe they weren't disagreeing with each other. Maybe each one was just disagreeing with itself. If a single assistant returns wildly different sources run to run, then "these four models cite different things" is a meaningless statement. You'd be measuring noise and calling it signal. The control The fix is the same idea as a control group. Measure the thing you're worried about, separately, and see if it explains your result.

AgustaON 2026-07-29 14:44 8 原文
AI 资讯 Dev.to

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

Mukul S 2026-07-29 14:37 8 原文
AI 资讯 Dev.to

The file conversion tools I actually reach for (instead of installing FFmpeg again)

Every few months I hit the same wall. A client sends over a .mov file that needs to end up as an .mp4 for a web page, or someone drops a .heic photo in Slack and asks why it "won't open" on their Windows machine. My first instinct used to be brew install ffmpeg and then spend twenty minutes remembering the flags. These days I don't bother unless the job actually needs scripting or batch automation. Here's what's actually in my rotation, and when I reach for each one. When it's a one-off file and I just need it done If I'm not going to touch this format again for another six months, I'm not installing anything. Browser-based converters have gotten good enough that for a single file, they're just faster. CloudConvert is usually my first stop for anything document or spreadsheet related — it handles a wide range of formats and the interface doesn't get in the way. AhaConvert is what I use when it's image or audio work specifically; it's fully browser-based, no account needed, and it deletes uploaded files automatically after 24 hours, which matters if the file has anything client-confidential in it. Neither one requires me to think about dependencies or version conflicts, which honestly is 90% of why I use them. For quick audio grabs — pulling an MP3 out of a video file someone sent, or converting an old .wma voice memo — I've had good results with Online-Convert too. It's not pretty, but it's reliable and doesn't nag you to create an account. When I need to batch-process a folder This is where the browser tools stop being useful and FFmpeg earns its keep. If I'm converting 200 images or normalizing audio levels across a podcast archive, nothing beats a script I can rerun. for f in * .wav ; do ffmpeg -i " $f " -acodec libmp3lame " ${ f %.wav } .mp3" done I know this loop by heart at this point. If you're doing this regularly, it's worth the setup pain once and never thinking about it again. When it's part of a pipeline If file conversion is happening inside an app — sa

AhaConvert 2026-07-29 14:34 4 原文
AI 资讯 Dev.to

Mes premiers pas avec Linux et Git : comment j'ai préparé ma réunion CloudHer

Il y a quelques jours, j'ai réalisé un truc qui m'a un peu stressée : ma réunion de la semaine 4 avec ma mentor Endah Bongo approchait, et le programme prévoyait Linux et Git. Sauf que... je ne maîtrisais pas encore les différentes commandes utilisées. Plutôt que de paniquer, j'ai décidé de prendre les choses en main et de tout pratiquer en direct, une commande à la fois, jusqu'à ce que ça fasse sens. Voici ce que j'ai appris, dans l'ordre où je l'ai découvert. Se repérer dans un terminal Linux La toute première chose à comprendre avec Linux, c'est qu'on est toujours "quelque part" dans une arborescence de dossiers. Trois commandes suffisent pour s'orienter : pwd ( print working directory ) affiche l'endroit exact où on se trouve ls liste le contenu du dossier courant cd permet de se déplacer d'un dossier à l'autre Avec cd ~ , on revient direct dans son dossier personnel. Une astuce toute simple, mais qui change la vie quand on découvre le terminal. Créer et organiser des fichiers Une fois qu'on sait se déplacer, l'étape suivante c'est de manipuler des fichiers et dossiers : mkdir crée un nouveau dossier touch crée un fichier vide ls -la permet de tout voir en détail, y compris les fichiers cachés et les permissions C'est là que j'ai découvert les permissions Linux (ce fameux -rw-r--r-- qu'on voit à côté de chaque fichier), qui déterminent qui peut lire, écrire ou exécuter un fichier. Entrer dans le monde de Git Une fois les bases Linux en poche, place à Git. Première étape : configurer son identité, une seule fois pour toutes les utilisations futures. git config --global user.name "Ton nom" git config --global user.email "ton_email@exemple.com" Ensuite, j'ai transformé mon dossier de test en dépôt Git avec git init , puis j'ai découvert le cycle de base que tout développeur utilise au quotidien : Modifier un fichier git add pour l'ajouter à la zone de préparation (staging) git commit -m "message" pour valider les changements Entre les deux, git status est devenu mo

SIEWE SANTHE AUDREY CAMILA 2026-07-29 14:28 7 原文
AI 资讯 Dev.to

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

Christopher 2026-07-29 14:21 7 原文
AI 资讯 Dev.to

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

Md Mijanur Molla 2026-07-29 14:20 6 原文
AI 资讯 Dev.to

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

Srilatha 2026-07-29 14:17 5 原文
AI 资讯 Dev.to

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

Roshan Singh 2026-07-29 14:13 8 原文