<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emmanuel Belo</title>
    <description>The latest articles on DEV Community by Emmanuel Belo (@ebelo).</description>
    <link>https://dev.to/ebelo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F376071%2F038fbb8d-ec4b-4a76-9851-4add5bf91678.jpg</url>
      <title>DEV Community: Emmanuel Belo</title>
      <link>https://dev.to/ebelo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ebelo"/>
    <language>en</language>
    <item>
      <title>🧠 Lessons Learned: Multi-Platform Intelligence Suite</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Sat, 21 Feb 2026 10:31:48 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/lessons-learned-xtwitter-daily-summary-project-ip5</link>
      <guid>https://dev.to/camptocamp-geo/lessons-learned-xtwitter-daily-summary-project-ip5</guid>
      <description>&lt;p&gt;This retrospective documents the development of a Multi-Platform Intelligence Suite — an autonomous OSINT python tool designed to transform high-noise social feeds into structured, geopolitical-style briefings, released on &lt;a href="https://github.com/ebelo/x-daily-summary?tab=readme-ov-file#x-daily-summary-tool" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The application currently aggregates timelines from X (Twitter) and Bluesky, standardizing engagement metrics via Z-score normalization to ensure high-signal content is identified regardless of the host platform's user density.&lt;/p&gt;

&lt;p&gt;The tool supports two AI backends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini (Google Cloud):&lt;/strong&gt; Fast, high-quality, but costs API credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama (Local):&lt;/strong&gt; Runs entirely on your own hardware, free to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This document captures the real challenges I ran into, the decisions I made, and the insights I'd apply if starting over. It is written for someone who wants to build something similar.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. API Costs: Discover, Measure, Then Mitigate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What happened:&lt;/strong&gt; The X API is priced pay-per-request. $25 was loaded as credits and the tool was run for the first time on a real 24-hour timeline. The result: fetching ~800 posts cost approximately $4 in a single run.&lt;/p&gt;

&lt;p&gt;That's a concrete, measurable signal. At that rate, iterating on the AI pipeline — running it 5-10 times to test different prompts, models, and architectures — would have burned through the entire $25 budget in API calls alone, producing nothing useful.&lt;/p&gt;

&lt;p&gt;The immediate response was to ask the agent to implement a skip flag: &lt;code&gt;--from-summary&lt;/code&gt;. Once a summary is fetched and saved to disk, all subsequent runs reuse it. The X API is never called again until you explicitly want fresh data.&lt;/p&gt;

&lt;p&gt;A second flag, &lt;code&gt;--intel-limit N&lt;/code&gt;, was added to cap the number of posts sent to the LLM for fast, cheap iteration on the AI components.&lt;/p&gt;

&lt;p&gt;The lesson is not "plan for costs upfront." It's: measure your first real run, notice where money is being burned, and immediately build the escape hatch. On a pay-per-request API, the fetch layer and the intelligence layer should be independently executable from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; Two-stage pipelines (fetch → process) should always support running each stage independently. The moment you see a real cost, you can respond in minutes — if the architecture allows it.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Value of Agent-Delegated Complexity
&lt;/h2&gt;

&lt;p&gt;Several genuinely hard technical problems appeared during this project: OAuth 1.0a authentication (a 4-key scheme used by the X API), environment variable loading bugs, and API credential validation errors that produced opaque error messages. These are exactly the kinds of problems that would traditionally stop a non-developer cold.&lt;/p&gt;

&lt;p&gt;They didn't stop the project. The agent diagnosed each issue, reprompted itself, tried fixes, validated them, and moved on — autonomously. From the user's perspective, these problems &lt;em&gt;happened and were resolved&lt;/em&gt; without any manual intervention. No terminal commands to write. No &lt;code&gt;.env&lt;/code&gt; syntax to understand. No OAuth documentation to read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real lesson here is not technical — it is about trust and scope.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working with an agentic AI partner means you can &lt;strong&gt;delegate an entire category of problem&lt;/strong&gt; — low-level debugging, configuration, environment management — and direct your own attention toward higher-level decisions: &lt;em&gt;what&lt;/em&gt; to build, &lt;em&gt;which&lt;/em&gt; model to use, &lt;em&gt;what&lt;/em&gt; the output should look like.&lt;/p&gt;

&lt;p&gt;This is a different kind of collaboration than using a search engine or a tutorial. The agent doesn't just give you the answer — it implements it, tests it, and moves on. The release of being able to trust that process was significant: it meant the pace of the project was set by &lt;em&gt;decisions&lt;/em&gt;, not by debugging capacity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; The ceiling of what a non-developer can build is dramatically higher with an agentic AI partner — not because the technical problems go away, but because they no longer have to stop you.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Architecture Decision: Map-Reduce for Local Models
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt; A "context window" is the maximum amount of text a language model can process at once. A typical LLM context window holds ~8,000–32,000 tokens. An 800-post timeline easily exceeds that limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Feeding all 800+ posts to a local model in one prompt caused hallucinations, dropped posts, and incoherent summaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution — Map-Reduce:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F545mr99npv2rh33epu4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F545mr99npv2rh33epu4n.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Map:&lt;/strong&gt; Split posts into small batches of 10. Ask the model to classify each post into one of 6 predefined categories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select:&lt;/strong&gt; From each category, take only the top 15 posts by engagement score.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft:&lt;/strong&gt; Generate a section summary for each category (90 posts total, well within any context window).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduce (Reflective Pass):&lt;/strong&gt; Feed all 6 drafted sections back to the model and ask it to synthesize a single-paragraph &lt;strong&gt;Executive Summary&lt;/strong&gt; — the model reflecting on its own work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The "reflective pass" is a powerful general pattern: generate drafts, then ask the model to step back and synthesize. It consistently produces better summaries than one-shot attempts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; For large datasets, never attempt a single prompt. Classify first, then synthesize progressively.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Cloud-to-Local: Architectures Don't Scale Down
&lt;/h2&gt;

&lt;p&gt;This is perhaps the most counterintuitive lesson of the entire project.&lt;/p&gt;

&lt;p&gt;The natural assumption when adding local model support is: &lt;em&gt;"I already have a Gemini prompt that works well — I'll reuse it with Ollama and swap the endpoint."&lt;/em&gt; This is wrong, and the failure is not gradual — it is qualitative.&lt;/p&gt;

&lt;p&gt;In naval engineering, this problem has a name: &lt;strong&gt;similitude failure&lt;/strong&gt;. When you build a scale model of a ship to test in a tank, the forces that dominate behavior are &lt;em&gt;different&lt;/em&gt; at small scale. A full-size ship is dominated by wave drag and inertia. A small model in a tub is dominated by surface tension and viscosity. The same equations, the same shape — completely different governing physics. You can't just shrink the design.&lt;/p&gt;

&lt;p&gt;The same principle applies to LLMs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure Mode&lt;/th&gt;
&lt;th&gt;Large Cloud Model (Gemini)&lt;/th&gt;
&lt;th&gt;Small Local Model (Llama 3.2)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;Effectively unlimited (1M+ tokens)&lt;/td&gt;
&lt;td&gt;Very limited (~8K tokens)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instruction fidelity&lt;/td&gt;
&lt;td&gt;Reliably follows complex prompts&lt;/td&gt;
&lt;td&gt;Drifts, invents, simplifies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;Stable with a well-written prompt&lt;/td&gt;
&lt;td&gt;Needs strict enumeration of every valid output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hallucination&lt;/td&gt;
&lt;td&gt;Rare in classification tasks&lt;/td&gt;
&lt;td&gt;Common if categories are not explicitly constrained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single-pass summary&lt;/td&gt;
&lt;td&gt;Works for 800+ posts&lt;/td&gt;
&lt;td&gt;Fails; context is truncated or ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;strong&gt;dominant failure modes are qualitatively different&lt;/strong&gt;, not just quantitatively worse. A single Gemini prompt breaks in a completely different way on Llama 3.2 than you'd expect from "a smaller, dumber version."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt; Local model support is not a feature — it is a separate architecture. It requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaking large prompts into small, constrained steps (Map-Reduce)&lt;/li&gt;
&lt;li&gt;Strict enumeration of all valid outputs in the prompt&lt;/li&gt;
&lt;li&gt;A reflective synthesis pass instead of one-shot generation&lt;/li&gt;
&lt;li&gt;Validation and fallback logic at every stage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Corollary — Define the Output Schema First:&lt;/strong&gt; This lesson has an immediate practical implication. With two backends (Gemini and Ollama), each had its own system prompt written independently. The result: different category names, different heading structures, and incompatible report formats. The Gemini prompt used free-form topics; the Ollama pipeline used a fixed list of 6 categories. They couldn't be compared or combined.&lt;/p&gt;

&lt;p&gt;The fix was to define the 6 categories centrally and update both prompts to reference them. In a multi-backend system, the output schema is the contract — treat it like an API. Writing prompts before agreeing on the schema causes messy retrofits.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Model Selection: VRAM is the Real Constraint
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt; VRAM (Video RAM) is the dedicated memory on your GPU. If a model fits entirely in VRAM, inference is extremely fast. If it doesn't, the system "spills" to regular RAM, which is 10-20x slower.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Fits in 4GB VRAM?&lt;/th&gt;
&lt;th&gt;Time for 839 posts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mistral 7B&lt;/td&gt;
&lt;td&gt;4.4 GB&lt;/td&gt;
&lt;td&gt;❌ (RAM spill)&lt;/td&gt;
&lt;td&gt;~6.5 hours (estimated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.2 3B&lt;/td&gt;
&lt;td&gt;2.0 GB&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~25 minutes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini Flash&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;~45 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The hardware used for this benchmark: &lt;strong&gt;Intel 11th Gen i7, 16GB RAM, NVIDIA T500 (4GB VRAM)&lt;/strong&gt; — a mobile workstation laptop several years old. Despite its age, Llama 3.2 ran entirely in its VRAM and processed the full 839-post dataset comfortably.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Trap:&lt;/strong&gt; "Mistral-Small" sounds like a small model — it is actually 24B parameters (~14GB). The "Small" in Mistral's naming refers to it being small relative to their 123B flagship, not relative to a 7B base model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; For batch-heavy local pipelines, the largest model that fits &lt;em&gt;completely&lt;/em&gt; in VRAM will outperform a "smarter" model that doesn't — often by an order of magnitude.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Prompt Engineering: Strictness Over Creativity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; Local models are prone to "category hallucination" — inventing category names not in the provided list (e.g. returning "Finance &amp;amp; Economy" instead of the defined "Economics &amp;amp; Markets"). This corrupts the Map-Reduce grouping step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What worked:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Providing the exact list of 6 category strings in the prompt with explicit instruction to use &lt;em&gt;only&lt;/em&gt; these strings.&lt;/li&gt;
&lt;li&gt;One-shot formatting: showing the model one example of the expected input/output pair.&lt;/li&gt;
&lt;li&gt;Strict matching in the classification parser with a fallback to "unrecognised" rather than accepting approximate matches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; For structured classification tasks, suppress model creativity. Enumerate all valid outputs explicitly. Any ambiguity will be exploited.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Code Quality: SonarCloud as Your External Auditor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;As a non-developer, you cannot assess the security or quality of code you didn't write.&lt;/strong&gt; You can't spot a deeply nested function that will become impossible to maintain, or know when exception handling is done in a way that suppresses critical signals. You have to trust that the code is correct.&lt;/p&gt;

&lt;p&gt;SonarCloud provides an independent, automated answer to that trust problem. Every time code was pushed to GitHub, SonarCloud ran a quality pass and flagged any issues — from structural complexity to unsafe exception handling patterns. No developer judgment required; the findings are plain-language, specific, and actionable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The workflow that emerged was trivially simple:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the SonarCloud dashboard after a push.&lt;/li&gt;
&lt;li&gt;Copy the flagged issue description.&lt;/li&gt;
&lt;li&gt;Hand it directly to the coding agent: &lt;em&gt;"Fix this SonarCloud warning."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The agent implements the fix, explains what changed, and pushes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No major security issues were found. The warnings were structural — functions too complex to maintain easily, commented-out dividers mistaken for dead code, a &lt;code&gt;try/except&lt;/code&gt; pattern that could suppress system signals. All were resolved quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; For non-developer-led projects, a CI/CD quality gate like SonarCloud is not optional — it is your independent code reviewer. It closes the gap between "the agent wrote code" and "the code is trustworthy."&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Git Strategy: Branches for Architectural Changes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; During the shift to Map-Reduce, the codebase changed significantly — new modules, new data flow, new prompts. The temptation is to keep going until it "works" before committing. The result: a sprawling unstaged delta that's hard to reason about or partially revert.&lt;br&gt;
&lt;strong&gt;The psychological trap:&lt;/strong&gt; "I don't want to commit broken code." This causes delayed commits, which causes large messy commits, which causes reverting damage to be much worse.&lt;br&gt;
&lt;strong&gt;What to do instead:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;git checkout -b feature/map-reduce&lt;/code&gt; — protect &lt;code&gt;main&lt;/code&gt; from the work-in-progress.&lt;/li&gt;
&lt;li&gt;Commit each stable sub-component individually: the classifier function, the category selector, the section generator, then the assembler.&lt;/li&gt;
&lt;li&gt;End-to-end doesn't need to work for each commit — only the piece you just wrote needs to be internally correct.&lt;/li&gt;
&lt;li&gt;Merge to &lt;code&gt;main&lt;/code&gt; only when the full pipeline is tested green.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; A broken commit on a branch isn't broken code — it's a checkpoint. Use branches to make partial commits feel safe.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Beyond Vibe Coding: Agentic Technical Direction
&lt;/h2&gt;

&lt;p&gt;When you build software entirely through conversational AI, the popular term is "vibe coding" — a process often characterized by low-context requests ("make an app that does X") and the blind acceptance of AI-generated code. This frequently results in unmaintainable architecture because the human doesn't actually understand the system.&lt;br&gt;
This project demonstrated something fundamentally different: &lt;strong&gt;Agentic Technical Direction&lt;/strong&gt;. &lt;br&gt;
In this model, I acted as a Tech Lead or Technical Product Manager, not a typist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Defining Architecture:&lt;/strong&gt; I made the hard structural decisions ("Use Ollama for local inference," "Rank by engagement instead of X's proprietary algorithm," "Implement Map-Reduce to handle context windows").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditing &amp;amp; Verifying:&lt;/strong&gt; I didn't accept the first draft. When presented with failure modes (hallucinations, VRAM spills, API costs) by the agentic AI, I defined the mitigation strategy (e.g., "Implement a &lt;code&gt;--from-summary&lt;/code&gt; skip flag").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforcing Standards:&lt;/strong&gt; I demanded external quality gates (SonarCloud), insisted on 90%+ test coverage, and enforced open-source standards (MIT licenses, &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documenting the &lt;em&gt;Why&lt;/em&gt;:&lt;/strong&gt; I framed the project as a cohesive product with a distinct point of view (Local Privacy, Deep Reading), rather than just a script.
The AI agent wrote the code, but I designed the system. That is the future of software engineering.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  10. Leveling Up: Skills for Agentic Technical Direction
&lt;/h2&gt;

&lt;p&gt;Acting as a Technical Director for an AI agent requires a specific skill set that differs from traditional coding. Based on my workflow in this project, here are the key areas I need to develop for future agentic projects:&lt;/p&gt;

&lt;h3&gt;
  
  
  What to Learn: Git and Version Control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Challenge:&lt;/strong&gt; The fastest way out of bad AI-generated code is not asking the AI to fix it, but simply reverting to the last known good state. If I don't control the version timeline, the AI controls me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Skill:&lt;/strong&gt; Master the difference between the working directory, staging area, and commits. Learn to ruthlessly use feature branches (&lt;code&gt;git checkout -b new-experiment&lt;/code&gt;) so the main branch stays pristine until I explicitly approve the agent's work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What to Improve: The Skill of "Scaffolding"
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Challenge:&lt;/strong&gt; AI models struggle with "big bang" integration where everything is built at once, but they are incredible at filling in the blanks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Skill:&lt;/strong&gt; Practice "Data-First" building. Before asking the agent to write a processing pipeline, manually define exactly what the input data and desired output data look like. Write empty function signatures (stubs) with clear docstrings, and let the AI fill in the logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What to Study: Fundamentals of Software Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Challenge:&lt;/strong&gt; Without structural guidance, an AI will take the path of least resistance, resulting in giant, monolithic files holding thousands of lines of spaghetti code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Skill:&lt;/strong&gt; Learn the vocabulary of system design to direct the agent on &lt;em&gt;how&lt;/em&gt; files should interact. Understand "Separation of Concerns" (e.g., splitting fetching, ranking, and rendering) and "Dependency Injection" (which allowed us to easily swap between Gemini and Ollama).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Superpower to Cultivate: The "Stop and Inspect" Reflex
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Strength:&lt;/strong&gt; My best moments in this project occurred when development was paused to inspect failures. When SonarCloud flagged complexity, I had the agent refactor it. When a $4 API cost was observed, I had the agent build a bypass flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Lesson:&lt;/strong&gt; Many developers let AI tools generate code until the system collapses under its own weight. The reflex to inspect output, measure costs, and refactor messes before adding the next feature is exactly what makes a great Technical Director.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Conclusion: Learning by Doing with an AI Partner
&lt;/h2&gt;

&lt;p&gt;This project started as a focused utility and became a hands-on education in local AI orchestration, Python engineering, API management, CI/CD quality gates, and system design.&lt;/p&gt;

&lt;p&gt;The most important meta-lesson: &lt;strong&gt;complex, real work is the best teacher.&lt;/strong&gt; Passively reading about Map-Reduce, VRAM constraints, and OAuth authentication doesn't produce the same understanding as hitting those walls directly and solving through them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ayagszorokn3j2zgkbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ayagszorokn3j2zgkbj.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working with an agentic AI partner compressed that learning dramatically — not by removing the problems, but by making it possible to actually encounter and solve them faster than you could alone.&lt;/p&gt;

&lt;p&gt;The barriers to running your own local AI pipeline, writing production-quality Python, and shipping to GitHub with automated tests — are lower than they appear. You just need to start.&lt;/p&gt;

&lt;p&gt;And the trend is clear: the models that ran efficiently today on older laptop hardware would have required a high-end server just a few years ago. As quantization and architecture efficiency improve, the "VRAM constraint" will keep relaxing. A 3B model in 2026 already does things a 13B model from 2023 struggled with. The intelligence-per-gigabyte ratio is rising fast — and it will keep rising.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>Securing AI in Software Development: the Lethal Trifecta</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Wed, 05 Nov 2025 09:46:05 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/securing-ai-in-software-development-the-lethal-trifecta-3m07</link>
      <guid>https://dev.to/camptocamp-geo/securing-ai-in-software-development-the-lethal-trifecta-3m07</guid>
      <description>&lt;p&gt;AI assistants are transforming how software is developed. They help automate tasks, accelerate coding, and improve quality, but they also introduce new security challenges. Understanding and managing these risks is essential to ensure AI systems operate safely. Secure AI development involves identifying where vulnerabilities arise, limiting exposure to sensitive data, and ensuring AI tools cannot be misused or manipulated.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the Lethal Trifecta?
&lt;/h3&gt;

&lt;p&gt;A concept developed by &lt;a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/" rel="noopener noreferrer"&gt;Simon Willison&lt;/a&gt; that identifies three conditions that make AI systems particularly risky when they occur together. When all three conditions are present, an AI system becomes significantly more dangerous.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Three Conditions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Exposure to untrusted content&lt;/strong&gt;: Including hidden malicious instructions or incorrect information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access to private data&lt;/strong&gt;: Including secret keys, tokens, passwords, and proprietary information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ability to externally communicate&lt;/strong&gt;: The capability to send data outside a closed system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuuhs4v3ys66bxfwq5gp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuuhs4v3ys66bxfwq5gp.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;br&gt;
(c) &lt;a href="https://trainingportal.linuxfoundation.org/courses/secure-aiml-driven-software-development-lfel1012" rel="noopener noreferrer"&gt;https://trainingportal.linuxfoundation.org/courses/secure-aiml-driven-software-development-lfel1012&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Risk
&lt;/h3&gt;

&lt;p&gt;When all three conditions exist simultaneously, an AI assistant can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receive malicious commands from untrusted content&lt;/li&gt;
&lt;li&gt;Extract or use private data&lt;/li&gt;
&lt;li&gt;Send that data elsewhere or use it to attack systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Risk Mitigation Strategies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The primary recommendation is to remove at least one of the three conditions.&lt;/li&gt;
&lt;li&gt;If removal isn't possible, constrain what you can control.&lt;/li&gt;
&lt;li&gt;Implement additional risk reduction measures when the trifecta cannot be fully broken.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Diving into the 2024 Francophone QGIS Meetings</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Thu, 28 Mar 2024 16:40:13 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/diving-into-the-2024-francophone-qgis-meetings-2h95</link>
      <guid>https://dev.to/camptocamp-geo/diving-into-the-2024-francophone-qgis-meetings-2h95</guid>
      <description>&lt;p&gt;This week, the Camptocamp team had the privilege of participating in the 2024 Francophone QGIS Meetings in Grenoble, a key event for the QGIS user and developer community. As a Gold Sponsor and an IT service provider specializing in open source solutions, Camptocamp not only supported this event but also actively contributed to its success through enriching presentations and fruitful exchanges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributions from the Camptocamp Team
&lt;/h2&gt;

&lt;p&gt;During the event, our collaborators, Arnaud Morvan, Julien Waddle, Moritz Krimse and Alexian Masson, shared their expertise through various activities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arnaud delved into debugging methods for QGIS running in Docker containers, aiming to simplify the development process for the community.&lt;/li&gt;
&lt;li&gt;Julien shared his experience of &lt;a href="https://www.camptocamp.com/mergin-maps"&gt;Mergin Maps&lt;/a&gt; with the audience, highlighting tips for maximizing efficiency in the field with QGIS.&lt;/li&gt;
&lt;li&gt;Moritz and Alexian explored improvements for many-to-many relationships in QGIS and assessed the integration of QGIS with Qt 6, respectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Three Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;3D Innovation: The discussion on integrating SFCGAL into QGIS for 3D computing has opened up new perspectives for handling complex spatial data.&lt;/li&gt;
&lt;li&gt;Enhancing UX in QGIS Modeler: Proposals to improve the user experience in the QGIS modeler aim to make it as intuitive and efficient as market-leading solutions.&lt;/li&gt;
&lt;li&gt;Security within the QGIS Project: The initiative to bolster security within the QGIS project highlights the importance placed on the reliability and safety of open source infrastructures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Camptocamp
&lt;/h2&gt;

&lt;p&gt;This participation underscores Camptocamp's commitment to the continuous improvement of QGIS and the open source geospatial ecosystem. We firmly believe in the added value of free and open solutions to meet contemporary geospatial challenges.&lt;/p&gt;

&lt;p&gt;Camptocamp stands out in the IT landscape for its commitment to open source technologies, especially in the geospatial domain. Our expertise ranges from designing innovative Geographic Information Systems (GIS) to implementing customized solutions based on QGIS, thus meeting the specific needs of our clients.&lt;/p&gt;

&lt;p&gt;If you're looking to leverage our expertise in open source geospatial solutions and customized Geographic Information Systems, don't hesitate to contact &lt;a href="https://www.camptocamp.com/qgis"&gt;Camptocamp&lt;/a&gt;. Our team is ready to assist you in realizing your most ambitious projects by providing innovative and sustainable solutions.&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>opensource</category>
      <category>merginmaps</category>
      <category>gis</category>
    </item>
    <item>
      <title>GeoServer 2.25</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Tue, 26 Mar 2024 08:23:56 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/geoserver-225-1k9h</link>
      <guid>https://dev.to/camptocamp-geo/geoserver-225-1k9h</guid>
      <description>&lt;p&gt;GeoServer, a key tool in the geospatial data management sector, facilitates the sharing and editing of geospatial information via web services, complying with Open Geospatial Consortium (OGC) standards. Camptocamp has consistently supported the GeoServer project, emphasizing the value of open-source solutions in geospatial technologies. This post outlines the recent updates to GeoServer, notably the release of GeoServer 2.25 and the development of GeoServer-Cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  GeoServer 2.25 Update
&lt;/h2&gt;

&lt;p&gt;The latest stable release of GeoServer, &lt;a href="https://geoserver.org/announcements/vulnerability/2024/03/19/geoserver-2-25-0-released.html"&gt;version 2.25&lt;/a&gt;, brings forth updates that enhance its functionality and security for production use. Developed alongside GeoTools 31.0 and GeoWebCache 1.25.0, this version introduces necessary security fixes and configuration optimizations. These updates are intended to improve the management and handling of geospatial data for users relying on GeoServer in their operational environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  On GeoServer-Cloud
&lt;/h2&gt;

&lt;p&gt;In addition to ongoing improvements to GeoServer, Camptocamp has led the initiative to develop GeoServer-Cloud. This project reconfigures GeoServer’s traditional structure into a cloud-compatible format, utilizing a microservices architecture. The intent behind GeoServer-Cloud is to accommodate the needs of those requiring scalable and resilient geospatial data management solutions within a cloud-native framework. It aims to simplify the deployment, scaling, and maintenance of geospatial services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camptocamp’s Role in Cloud-Native Deployments
&lt;/h2&gt;

&lt;p&gt;Camptocamp’s involvement with GeoServer extends to contributions and deployments, making us a knowledgeable entity in integrating geospatial technologies within cloud-native platforms. Our expertise covers both the enhancement of GeoServer and the adaptation of GeoServer-Cloud, aimed at maximizing the benefits of these technologies for our clients. From performance improvements and security assurance to facilitating cloud migrations, Camptocamp offers tailored consulting services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consulting Services for GeoServer and GeoServer-Cloud
&lt;/h2&gt;

&lt;p&gt;Organizations interested in leveraging GeoServer 2.25’s features or transitioning to GeoServer-Cloud may find Camptocamp’s consulting services beneficial. Our team is prepared to support projects from the planning stage through to full deployment, ensuring a smooth integration of these technologies into existing infrastructures.&lt;/p&gt;

&lt;p&gt;Should your organization consider utilizing GeoServer or moving towards a cloud-native approach with GeoServer-Cloud, we encourage you to get in touch. Camptocamp is here to provide the necessary expertise and support.&lt;/p&gt;

&lt;p&gt;For further information or to discuss your project, please visit our &lt;a href="https://www.camptocamp.com"&gt;website&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/emmanuelbelo/"&gt;contact me&lt;/a&gt;. Camptocamp is committed to assisting you in achieving an effective and scalable geospatial data management system.&lt;/p&gt;

</description>
      <category>geoserver</category>
      <category>osgeo</category>
      <category>cloudnative</category>
      <category>geospatial</category>
    </item>
    <item>
      <title>GeoParquet 1.0.0 is Here, and It's Changing the Geospatial Game</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Thu, 21 Sep 2023 09:39:14 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/geoparquet-5gbn</link>
      <guid>https://dev.to/camptocamp-geo/geoparquet-5gbn</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The GeoParquet community has reached a significant milestone with the release of GeoParquet &lt;a href="https://geoparquet.org/releases/v1.0.0/"&gt;1.0.0&lt;/a&gt;. With over 20 different libraries and tools already supporting the format and hundreds of gigabytes of public data available, GeoParquet is rapidly emerging as a standard for geospatial data. The 1.0.0 release marks a turning point, signifying a stable foundation that promises to impact both the geospatial and the broader data science community significantly. Let's explore what this means and why you should be excited.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is GeoParquet, and Why Does it Matter?
&lt;/h2&gt;

&lt;p&gt;GeoParquet aims to standardize the way geometries are encoded in the Apache Parquet format. One of the standout features of GeoParquet is its efficiency. Compared to traditional formats like shp, gpkg, or fgb, GeoParquet files are generally smaller. This is thanks to Parquet's default compression scheme. Furthermore, GeoParquet boasts impressive speed, a characteristic owed to its columnar architecture.&lt;br&gt;
Not just another file format, GeoParquet has proven itself as a versatile and efficient option for geospatial data, making it ideal for cloud-native geospatial distribution and day-to-day operations in geospatial science.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding GeoParquet's Immutability in Relation to Its Columnar Format
&lt;/h2&gt;

&lt;p&gt;The columnar format is a cornerstone of GeoParquet's design, impacting how it stores and interacts with data. Its immutable characteristic is deeply intertwined with its columnar nature, offering unique advantages and insights into its design philosophy. Let’s examine this relationship in more detail.&lt;br&gt;
Traditional row-based storage systems arrange data in consecutive rows, making them optimized for transactional operations. In contrast, columnar storage systems store data in columns. This means all values of a single attribute (or column) are stored together. This organization is particularly advantageous for analytical operations where typically only a subset of attributes are needed for a query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Immutability in Columnar Systems
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Compression:&lt;/strong&gt; One of the benefits of columnar storage is its ability to achieve high compression rates. Data in a single column is often similar, lending itself well to compression. When data is immutable, compression algorithms can work more efficiently as the structure of the data remains consistent, and there's no need to accommodate potential in-place modifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Integrity and Consistency:&lt;/strong&gt; Columnar systems, like GeoParquet, deal with large amounts of data. Immutability ensures that once written, the data remains consistent, reducing complexity and potential errors in concurrent read/write operations. There's no risk of reading partially updated columns, which can be crucial in analytical tasks where data accuracy is paramount.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized Read Operations:&lt;/strong&gt; The design of GeoParquet is inherently geared towards read-heavy operations typical in analytics. Immutability reinforces this by ensuring that the data structures optimized for reading aren't compromised with the overhead of handling in-place updates. Thus, query performance remains swift and efficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Data Versioning:&lt;/strong&gt; In a world where tracking changes and data provenance is vital, immutability in a columnar system simplifies versioning. Instead of tracking changes within a file, new data writes result in new versions, making it easier to trace back through data history.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Integration with QGIS
&lt;/h2&gt;

&lt;p&gt;Given that QGIS has now integrated GeoParquet visualization support for Windows and Linux users, it's essential to understand the workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users can effortlessly load and visualize GeoParquet data within QGIS.&lt;/li&gt;
&lt;li&gt;While analysis and visualization are fully supported, any modifications or edits to the data will necessitate the creation of a new GeoParquet file, rather than altering the existing one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For those accustomed to formats that support in-place edits, GeoParquet's approach might require a slight adjustment in workflow. However, the benefits of data consistency, integrity, and enhanced performance make it a worthy trade-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  GeoParquet &amp;amp; The Cloud-Native Revolution
&lt;/h2&gt;

&lt;p&gt;At its core, cloud-native refers to a design approach in which applications are built, deployed, and operated at scale in cloud environments. These applications leverage cloud architectures, employ microservices, and are containerized, ensuring they are scalable, resilient, and easily maintainable.&lt;br&gt;
In the geospatial domain, the introduction of GeoParquet as a preferred data format dovetails perfectly with cloud-native storage solutions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; GeoParquet, with its compactness and optimized design, is well-suited for the vast storage capacities that cloud platforms offer. Users can store terabytes or even petabytes of geospatial data without worrying about physical infrastructure constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency in Data Retrieval:&lt;/strong&gt; Cloud-native storage systems, such as Amazon S3 or Google Cloud Storage, are designed for high-speed data retrieval. Given GeoParquet's columnar format, queries can efficiently fetch only the necessary columns, reducing I/O operations and costs in cloud environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immutable Nature:&lt;/strong&gt; GeoParquet's immutable characteristic aligns with the cloud's object storage model, where data objects are typically write-once and read-many. This match ensures data consistency, especially in distributed cloud environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-effective:&lt;/strong&gt; By combining GeoParquet's compression capabilities with cloud storage's often pay-as-you-go model, organizations can achieve cost savings both in storage space and data transfer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Next for GeoParquet?
&lt;/h2&gt;

&lt;p&gt;The 1.0.0 release is not the end but a new beginning. The format is now undergoing the rigorous Open Geospatial Consortium's standardization process. This ensures that GeoParquet will be globally recognized and adopted, further solidifying its status as the go-to option for geospatial data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discover Camptocamp's Expertise
&lt;/h2&gt;

&lt;p&gt;If the journey to the cloud seems daunting, or if you're looking to optimize your existing cloud strategy, we have the perfect partner in mind. &lt;a href="https://www.camptocamp.com"&gt;Camptocamp&lt;/a&gt; stands at the forefront of geospatial cloud solutions, bringing years of expertise and a passion for innovation. Their dedicated team of specialists is equipped to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Guide Your Cloud Transition:&lt;/strong&gt; From initial consultations to full-scale migrations, Camptocamp is your trusted partner in the cloud journey.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize Geospatial Workflows:&lt;/strong&gt; With a deep understanding of GeoParquet and other geospatial tools, they can help you harness the full power of geospatial data in the cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide Tailored Solutions:&lt;/strong&gt; Every organization is unique, and so are its cloud needs. Camptocamp crafts bespoke solutions that align with your specific goals and challenges.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>camptocamp</category>
      <category>geoparquet</category>
      <category>parquet</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>social media bookmarks</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Fri, 20 May 2022 15:04:00 +0000</pubDate>
      <link>https://dev.to/ebelo/social-media-bookmarks-1a3</link>
      <guid>https://dev.to/ebelo/social-media-bookmarks-1a3</guid>
      <description>&lt;h2&gt;
  
  
  Awards
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;swissgeol.ch Geospatial World Forum Award

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6940572853641568257/"&gt;GWF linkedin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/swisstopo_hurra-swissgeolch-gewinnt-aus-%C3%BCber-100-activity-6932249614985142273-BUWJ"&gt;Swisstopo linkedin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Events
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;2022&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lyon Métropole GIS day [FR]. Presenting open source GIS solutions: &lt;a href="https://www.linkedin.com/posts/jnponnelle_collterr-communsnumaezriques-opendata-activity-6933390335398035458-GXUd"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GeoMapfish Users Group Meeting in Yverdon: &lt;a href="https://www.linkedin.com/posts/geomapfish_geomapfish-lidar-wfs-activity-6928019575607341056-gl-R"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2021&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IGN GeoCommun workshop in Paris, France &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6813459998274818048"&gt;Lindkedin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open Source contributions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OpenLayers WebGL Vector renderer &lt;a href="https://github.com/openlayers/openlayers/pull/13461#pullrequestreview-1047165262"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cloud Native GeoServer Project Donation &lt;a href="https://github.com/geoserver/geoserver/wiki/GSIP-201"&gt;GitHub&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>QGIS Hackfest</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Fri, 20 May 2022 08:31:15 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/qgis-hackfest-1pmh</link>
      <guid>https://dev.to/camptocamp-geo/qgis-hackfest-1pmh</guid>
      <description>&lt;p&gt;This year's &lt;a href="https://www.camptocamp.com/qgis"&gt;QGIS&lt;/a&gt; contributors meeting will take place in Florence, Italy. QGIS has established itself as the leading Open Source GIS software. It includes a desktop application and a server part for streamlining map publication. The maps you prepare from your desktop are one click away from being published on the web as OGC webservices. QGIS provides an excellent open source alternative to ESRI ArcGIS Pro and benefits from a large and vivid community.&lt;/p&gt;

&lt;p&gt;You can register here: &lt;a href="https://github.com/qgis/QGIS/wiki/24th-Contributors-Meeting-in-Firenze"&gt;24th-Contributors-Meeting-in-Firenze&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A QGIS Contributors Meeting is a volunteer-driven event where contributors to the QGIS project from around the world get together in a common space - usually a university campus. The event is normally three days in duration and we hold two such events each year. During these events, contributors to the QGIS project take the opportunity to plan their work, hold face-to-face discussions and present new improvements to the QGIS project that they have been working on.&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>gis</category>
      <category>osgeo</category>
      <category>geospatial</category>
    </item>
    <item>
      <title>FOSS4G Conference</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Thu, 19 May 2022 16:06:08 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/foss4g-conference-1i0n</link>
      <guid>https://dev.to/camptocamp-geo/foss4g-conference-1i0n</guid>
      <description>&lt;p&gt;This year's &lt;a href="https://2022.foss4g.org/"&gt;FOSS4G conference&lt;/a&gt; takes place in Florence, Italy and the early bird registration ends by June, 30. So make sure you get your ticket early enough!&lt;/p&gt;

&lt;p&gt;&lt;a href="//www.camptocamp.com"&gt;Camptocamp&lt;/a&gt; supports the event with a sponsorship and many of our colleagues will participate in the event. We submitted multiple talks which got accepted by the program comitee. This will be the opportunity for you to get to know more about our solutions, projects and engagement in the open source communities. Watch out for the following talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contributing to Geospatial Cloud Native Solutions&lt;/li&gt;
&lt;li&gt;GeoMapFish Project status&lt;/li&gt;
&lt;li&gt;MapFish Print Project status&lt;/li&gt;
&lt;li&gt;Favoring Opensource Technologies for French Fire Brigades&lt;/li&gt;
&lt;li&gt;GeoNetwork&lt;/li&gt;
&lt;li&gt;GeoServer-cloud: Cloud Native GeoServer in production environments&lt;/li&gt;
&lt;li&gt;2021 vector tiles R&amp;amp;D with baremaps&lt;/li&gt;
&lt;li&gt;Implementation of the Chinese Postman Problem in the Valhalla Routing Engine&lt;/li&gt;
&lt;li&gt;pgRouting optimization: from technical to functional&lt;/li&gt;
&lt;li&gt;Datahub: the confluence of open data and geo data&lt;/li&gt;
&lt;li&gt;ogc-client&lt;/li&gt;
&lt;li&gt;swissgeol.ch - Geology in 3D: new features&lt;/li&gt;
&lt;li&gt;The Carto 2 Project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and the following workshop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;geOrchestra&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FOSS4G is the acronym for Free and Open Source Software for Geospatial. It is the annual recurring global event hosted by OSGeo, the non-profit organization that supports and promotes the collaborative development of free and open source geographic technologies and open geospatial dataFOSS4G is the annual conference of the OSGeo organisation&lt;/p&gt;

&lt;p&gt;If you’d like to engage in a conversation on this topic, please connect, we’d be happy to help!&lt;/p&gt;

</description>
      <category>gis</category>
      <category>opensource</category>
      <category>geospatial</category>
    </item>
    <item>
      <title>Cloud Native Geospatial</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Thu, 19 May 2022 15:46:33 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/cloud-native-geospatial-efe</link>
      <guid>https://dev.to/camptocamp-geo/cloud-native-geospatial-efe</guid>
      <description>&lt;p&gt;I participated with &lt;a href="https://www.camptocamp.com"&gt;Camptocamp&lt;/a&gt; in the Cloud-Native Geospatial Outreach Event organized by the Open Geospatial Consortium in April 2022.&lt;/p&gt;

&lt;p&gt;Cloud native solutions are currently a hot topic in the geospatial industry and Camptocamp is participating in the effort of bringing the open-source stack in the cloud. Camptocamp is one of the main open source service providers offering both geospatial and DevOps expertise to it's customers.&lt;/p&gt;

&lt;p&gt;As a few examples you can have a look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The new cloud native version of Geoserver initiated by Camptocamp and donated to the community: &lt;a href="https://github.com/geoserver/geoserver-cloud"&gt;Cloud Native Geoserver&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GeoNetwork research and development initiatives to migrate to Elasticsearch, as a scalable metadata indexing system and the current software architecture migration to microservices: &lt;a href="https://github.com/geonetwork/geonetwork-microservices"&gt;GeoNetwork Microservices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Our OGC API STAC implementation in Rust, a very modern and efficient programming language. We initiated this project during last year OGC API code sprint meeting: &lt;a href="https://github.com/camptocamp/ogcapi"&gt;OGC API Rust Implementation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Custom vector tiles generation with Baremaps, a very performant and flexible solution to create your own vector tiles: &lt;a href="https://github.com/baremaps"&gt;Baremaps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And of course, the many geospatial projects we have been running in the cloud for years, leveraging the power of AWS, Azure, OVH, Deutsche Telekom Cloud and others for reliable and scalable operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, our DevOps experts work tirelessly to automate and ease the provisioning and management of cloud servers and services. In this context we released a very interesting infrastructure as code management system, making your geospatial data infrastructure cloud agnostic and called the &lt;a href="https://devops-stack.io/"&gt;DevOps Stack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you’d like to engage in a conversation on this topic, please connect, we’d be happy to help!&lt;/p&gt;

</description>
      <category>ogc</category>
      <category>gis</category>
      <category>cloudnative</category>
      <category>devops</category>
    </item>
    <item>
      <title>DevOpsDays Conference</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Thu, 19 May 2022 15:37:43 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/devopsdays-conference-2jlk</link>
      <guid>https://dev.to/camptocamp-geo/devopsdays-conference-2jlk</guid>
      <description>&lt;p&gt;I participated with &lt;a href="//www.camptocamp.com"&gt;Camptocamp&lt;/a&gt;to the international DevOpsDays Geneva conference 2022. The conference covers topics of interest to both Operations and Development, with a focus on Open Source, Agile and early Cloud Adoption.&lt;/p&gt;

&lt;p&gt;In the Geospatial field, we are focusing on Agile software development, Open Source contributions and DevSecOps. These topics are nowadays the 3 pillars for executing successful innovative projects at scale.&lt;/p&gt;

&lt;p&gt;At Camptocamp we develop and operate our solutions.&lt;/p&gt;

&lt;p&gt;Our DevOps culture leverages cloud native workflows, being active in multiple countries with both sovereign cloud providers (OVHcloud, Scaleway, Exoscale, Deutsche Telekom Open Telekom Cloud) or the international market leaders (Amazon Web Services (AWS), Microsoft Cloud Azure, Google). It’s a real asset for our customers to deploy their massive geospatial data in the cloud and let us build scalable applications using highly robust services.&lt;/p&gt;

&lt;p&gt;Speaking about open innovation and co-creation with our customers, the Software Development workflows align perfectly with our Infrastructure as Code approach of IT management. Provisioning, developing, improving and adapting rely on code changes and pull requests, for both the Operations and the Development. This unified model allows everyone to participate and speeds up processes, allowing agile software development to thrive.&lt;/p&gt;

&lt;p&gt;If you’d like to engage in a conversation on this topic, please connect, we’d be happy to help!&lt;/p&gt;

</description>
      <category>gis</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hello x/y/z!</title>
      <dc:creator>Emmanuel Belo</dc:creator>
      <pubDate>Wed, 29 Apr 2020 11:52:31 +0000</pubDate>
      <link>https://dev.to/camptocamp-geo/ewf-wef-i00</link>
      <guid>https://dev.to/camptocamp-geo/ewf-wef-i00</guid>
      <description>&lt;p&gt;Hello World!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
