# messages

Published articles for messages.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## T-Mobile rewards points expiry texts are a phishing scam

DevFeed: [T-Mobile rewards points expiry texts are a phishing scam](<https://devfeed.tech/articles/t-mobile-rewards-points-expiry-texts-are-a-phishing-scam-41305.md>)

Original publisher: [Read original article](<https://www.malwarebytes.com/blog/threat-intel/2026/09/t-mobile-rewards-points-expiry-texts-are-a-phishing-scam>)

Author: Pieter Arntz

Published: 2026-09-17T10:44:01Z

Content type: news

Language: en

Sources: [Malwarebytes](<https://devfeed.tech/sources/malwarebytes.md>)

Topics: [account](<https://devfeed.tech/topics/account.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [customer](<https://devfeed.tech/tags/customer.md>), [links](<https://devfeed.tech/tags/links.md>), [messages](<https://devfeed.tech/tags/messages.md>), [phishing](<https://devfeed.tech/tags/phishing.md>), [points](<https://devfeed.tech/tags/points.md>), [reward-points](<https://devfeed.tech/tags/reward-points.md>), [rewards-points](<https://devfeed.tech/tags/rewards-points.md>), [scam](<https://devfeed.tech/tags/scam.md>), [scams](<https://devfeed.tech/tags/scams.md>), [t-mobile](<https://devfeed.tech/tags/t-mobile.md>), [threat-intel](<https://devfeed.tech/tags/threat-intel.md>)

### AI overview

Malwarebytes reports a phishing campaign that sends fake T-Mobile rewards-point expiry messages. The messages use invented balances, urgent expiry dates, and phishing links to pressure recipients into clicking before verifying the claim.

### Source excerpt

A large phishing campaign is using fake T-Mobile rewards points and looming expiry dates to pressure recipients into clicking malicious links.

## Build a WhatsApp AI agent with Appwrite Functions and TablesDB

DevFeed: [Build a WhatsApp AI agent with Appwrite Functions and TablesDB](<https://devfeed.tech/articles/build-a-whatsapp-ai-agent-with-appwrite-functions-and-tablesdb-31445.md>)

Original publisher: [Read original article](<https://appwrite.io/blog/post/whatsapp-ai-agent-appwrite-functions>)

Author: Atharva Deosthale

Published: 2026-09-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Appwrite Blog](<https://devfeed.tech/sources/appwrite-blog.md>)

Topics: [Appwrite](<https://devfeed.tech/topics/appwrite.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Serverless](<https://devfeed.tech/topics/serverless.md>), [API](<https://devfeed.tech/topics/api.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [api](<https://devfeed.tech/tags/api.md>), [app](<https://devfeed.tech/tags/app.md>), [build](<https://devfeed.tech/tags/build.md>), [data](<https://devfeed.tech/tags/data.md>), [database](<https://devfeed.tech/tags/database.md>), [messages](<https://devfeed.tech/tags/messages.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [meta](<https://devfeed.tech/tags/meta.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [support](<https://devfeed.tech/tags/support.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>), [whatsapp](<https://devfeed.tech/tags/whatsapp.md>)

### AI overview

This tutorial shows how to build a WhatsApp AI support agent with Appwrite Functions and TablesDB. One function receives and stores incoming messages, while a second function retrieves conversation history, uses an order-lookup tool, sends replies through Meta's WhatsApp Cloud API, and stores the responses. Conversation summaries help keep long threads within the model's token budget.

### Source excerpt

Turn a WhatsApp number into an AI support agent. Two Appwrite Functions receive messages and reply, TablesDB keeps the conversation history, and a compaction step keeps the context small.

## Message Queue vs Event Bus vs Broker

DevFeed: [Message Queue vs Event Bus vs Broker](<https://devfeed.tech/articles/message-queue-vs-event-bus-vs-broker-18032.md>)

Original publisher: [Read original article](<https://blog.levelupcoding.com/p/message-queue-vs-event-bus-vs-broker>)

Author: Nikki Siapno

Published: 2026-09-10T12:22:39Z

Content type: article

Language: en

Sources: [Level Up Coding System Design Newsletter](<https://devfeed.tech/sources/level-up-coding-system-design-newsletter.md>)

Topics: [systems](<https://devfeed.tech/topics/systems.md>), [Latency](<https://devfeed.tech/topics/latency.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [consumer](<https://devfeed.tech/tags/consumer.md>), [fraud-detection](<https://devfeed.tech/tags/fraud-detection.md>), [latency](<https://devfeed.tech/tags/latency.md>), [messages](<https://devfeed.tech/tags/messages.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [payment](<https://devfeed.tech/tags/payment.md>), [queue](<https://devfeed.tech/tags/queue.md>)

### AI overview

This article distinguishes message queues, event buses, and brokers by the meaning of the message. It explains that queues assign work to consumers, support retries and dead-letter queues, smooth traffic spikes, and can develop growing backlogs and higher latency under sustained overload.

### Source excerpt

They often show up in the same architecture diagram, which makes them look interchangeable. They're not.

## OpenAI Responds to Apple's Lawsuit and Disputes Claims About Former Employees

DevFeed: [OpenAI Responds to Apple's Lawsuit and Disputes Claims About Former Employees](<https://devfeed.tech/articles/apple-is-getting-this-wrong-6296.md>)

Original publisher: [Read original article](<https://openai.com/index/apple-is-getting-this-wrong>)

Published: 2026-08-03T22:00:00Z

Content type: opinion

Language: en

Sources: [OpenAI News](<https://devfeed.tech/sources/openai-news.md>)

Topics: [OpenAI](<https://devfeed.tech/topics/openai.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [company](<https://devfeed.tech/tags/company.md>), [lawsuit](<https://devfeed.tech/tags/lawsuit.md>), [messages](<https://devfeed.tech/tags/messages.md>), [openai](<https://devfeed.tech/tags/openai.md>)

### AI overview

OpenAI responds to Apple's lawsuit by disputing Apple's account of its communications, allegations involving former employees, and claims concerning confidential information. It says it offered to work with Apple to resolve the allegations and argues that a preliminary injunction is unnecessary.

### Source excerpt

OpenAI addresses Apple's baseless lawsuit, corrects claims about its employees, and shares messages documenting what happened.

## Backpressure in Distributed Systems

DevFeed: [Backpressure in Distributed Systems](<https://devfeed.tech/articles/backpressure-in-distributed-systems-39399.md>)

Original publisher: [Read original article](<https://blog.pranshu-raj.in/posts/backpressure/>)

Author: Pranshu Raj

Published: 2026-07-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Pranshu Raj - blog on backend systems, performance and sidequests](<https://devfeed.tech/sources/pranshu-raj-blog-on-backend-systems-performance-and-sidequests.md>)

Topics: [backpressure](<https://devfeed.tech/topics/backpressure.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [real-time](<https://devfeed.tech/topics/real-time.md>)

Tags: [backpressure](<https://devfeed.tech/tags/backpressure.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [go](<https://devfeed.tech/tags/go.md>), [latency](<https://devfeed.tech/tags/latency.md>), [memory](<https://devfeed.tech/tags/memory.md>), [messages](<https://devfeed.tech/tags/messages.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This tutorial explains backpressure in distributed systems, including how it occurs when message producers outpace consumers and the resulting risks such as memory exhaustion, dropped messages, lower throughput, network waste, increased latency, and blocked producers. It introduces producer, messaging-system, and consumer roles and relates the topic to a real-time leaderboard project.

### Source excerpt

Understanding what it is, how to deal with it, where it's used and how I handled it in the real time leaderboard.

## ChatGPT Live and the New Architecture of Voice AI

DevFeed: [ChatGPT Live and the New Architecture of Voice AI](<https://devfeed.tech/articles/chatgpt-live-and-the-new-architecture-of-voice-ai-28517.md>)

Original publisher: [Read original article](<https://blog.risingstack.com/chatgpt-live-new-architecture-of-voice-ai/>)

Author: RisingStack Engineering

Published: 2026-07-16T12:38:22Z

Content type: article

Language: en

Sources: [RisingStack](<https://devfeed.tech/sources/risingstack.md>)

Topics: [voice ai](<https://devfeed.tech/topics/voice-ai.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [ChatGPT](<https://devfeed.tech/topics/chatgpt.md>), [OpenAI](<https://devfeed.tech/topics/openai.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [audio](<https://devfeed.tech/tags/audio.md>), [chatgpt](<https://devfeed.tech/tags/chatgpt.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [gpt](<https://devfeed.tech/tags/gpt.md>), [here](<https://devfeed.tech/tags/here.md>), [interrupt](<https://devfeed.tech/tags/interrupt.md>), [messages](<https://devfeed.tech/tags/messages.md>), [models](<https://devfeed.tech/tags/models.md>), [openai](<https://devfeed.tech/tags/openai.md>), [quality](<https://devfeed.tech/tags/quality.md>), [speaking](<https://devfeed.tech/tags/speaking.md>), [speech](<https://devfeed.tech/tags/speech.md>), [systems](<https://devfeed.tech/tags/systems.md>), [talk](<https://devfeed.tech/tags/talk.md>), [tool](<https://devfeed.tech/tags/tool.md>), [update](<https://devfeed.tech/tags/update.md>), [voice-ai](<https://devfeed.tech/tags/voice-ai.md>), [voices](<https://devfeed.tech/tags/voices.md>)

### AI overview

The article explains how OpenAI's GPT-Live models power ChatGPT Voice through a full-duplex architecture. The system can listen and speak simultaneously, handle interruptions, pause while users think, and delegate deeper reasoning, web search, or other complex work to another model.

### Source excerpt

OpenAI has introduced GPT-Live, a new generation of voice models that now powers ChatGPT Voice. At first, this may sound like another voice-quality update. The voices have been remastered, ChatGPT should interrupt less often, and it can respond more naturally when you pause, change direction or speak over it. But GPT-Live is more than a [...] The post ChatGPT Live and the New Architecture of Voice AI appeared first on RisingStack Engineering.

## How Discord Added Distributed Tracing to Its Elixir Message-Passing Services

DevFeed: [How Discord Added Distributed Tracing to Its Elixir Message-Passing Services](<https://devfeed.tech/articles/why-the-f-ck-is-discord-still-using-elixir-18140.md>)

Original publisher: [Read original article](<https://hungrymindsdev.substack.com/p/why-the-fck-is-discord-still-using>)

Author: Alexandre Zajac

Published: 2026-05-18T15:39:51Z

Content type: article

Language: en

Sources: [Hungry Minds](<https://devfeed.tech/sources/hungry-minds.md>)

Topics: [Discord](<https://devfeed.tech/topics/discord.md>), [Elixir](<https://devfeed.tech/topics/elixir.md>), [tracing](<https://devfeed.tech/topics/tracing.md>), [Traces](<https://devfeed.tech/topics/traces.md>), [telemetry](<https://devfeed.tech/topics/telemetry.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>)

Tags: [discord](<https://devfeed.tech/tags/discord.md>), [elixir](<https://devfeed.tech/tags/elixir.md>), [messages](<https://devfeed.tech/tags/messages.md>), [traces](<https://devfeed.tech/tags/traces.md>), [tracing](<https://devfeed.tech/tags/tracing.md>)

### AI overview

The article describes Discord's distributed-tracing implementation for Elixir services that communicate through message passing. It highlights trace-context propagation through message envelopes, a gradual zero-downtime migration, fanout-based sampling, lazy context unpacking, and restrictions on root spans after fanout.

### Source excerpt

PLUS: AI as Netflix model 📊, Spotify NLI via Claude 🎵, Subagent patterns 2026 🤖

## Using a Slack Channel as a Living Hype Document

DevFeed: [Using a Slack Channel as a Living Hype Document](<https://devfeed.tech/articles/you-should-make-a-hype-channel-27352.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/you-should-make-a-hype-channel>)

Author: Matt McKenna

Published: 2026-03-25T13:00:00Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Slack](<https://devfeed.tech/topics/slack.md>), [context](<https://devfeed.tech/topics/context.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>)

Tags: [engineering](<https://devfeed.tech/tags/engineering.md>), [engineering-management](<https://devfeed.tech/tags/engineering-management.md>), [hype-doc](<https://devfeed.tech/tags/hype-doc.md>), [messages](<https://devfeed.tech/tags/messages.md>), [performance](<https://devfeed.tech/tags/performance.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [slack](<https://devfeed.tech/tags/slack.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [team-culture](<https://devfeed.tech/tags/team-culture.md>)

### AI overview

The article describes using a dedicated Slack channel as a living hype document to record professional accomplishments. It explains that keeping wins in the tools where work happens can reduce friction, preserve context, support self-reflection and performance reviews, and help engineers advocate for themselves.

### Source excerpt

During my time at Square, I started using a Slack channel as a living hype doc and worked with my manager, Stephen Pickens, to refine the approach. Together we put this document together to share the

## On AI Slop

DevFeed: [On AI Slop](<https://devfeed.tech/articles/on-ai-slop-40856.md>)

Original publisher: [Read original article](<https://mutto.fyi/posts/2025/12/on-ai-slop/>)

Published: 2025-12-24T00:00:00Z

Content type: opinion

Language: en

Sources: [Mutt0-ds Notes](<https://devfeed.tech/sources/mutt0-ds-notes.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [communications](<https://devfeed.tech/topics/communications.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [ChatGPT](<https://devfeed.tech/topics/chatgpt.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [communication](<https://devfeed.tech/tags/communication.md>), [llm](<https://devfeed.tech/tags/llm.md>), [messages](<https://devfeed.tech/tags/messages.md>), [trust](<https://devfeed.tech/tags/trust.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

The author argues that unreviewed AI-generated text, especially in personal messages, is often recognizable as generic, verbose, and impersonal. They acknowledge useful applications for AI, but recommend reviewing generated text before sending it because careless communication can waste readers' time and weaken trust.

### Source excerpt

I've started to notice a very predictable trend: AI-generated messages in my inbox. What finally pushed me to write this was how casually...

## Strix the Stateful Agent

DevFeed: [Strix the Stateful Agent](<https://devfeed.tech/articles/strix-the-stateful-agent-33480.md>)

Original publisher: [Read original article](<https://timkellogg.me/blog/2025/12/15/strix>)

Published: 2025-12-15T00:00:00Z

Content type: article

Language: en

Sources: [Tim Kellogg](<https://devfeed.tech/sources/tim-kellogg.md>)

Topics: [Agent Harness](<https://devfeed.tech/topics/agent-harness.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [file](<https://devfeed.tech/topics/file.md>), [Shell](<https://devfeed.tech/topics/shell.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agent-harness](<https://devfeed.tech/tags/agent-harness.md>), [ai](<https://devfeed.tech/tags/ai.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [code](<https://devfeed.tech/tags/code.md>), [file](<https://devfeed.tech/tags/file.md>), [memory](<https://devfeed.tech/tags/memory.md>), [messages](<https://devfeed.tech/tags/messages.md>), [stateful](<https://devfeed.tech/tags/stateful.md>)

### AI overview

The article introduces Strix, a stateful autonomous AI agent built as an ambient ADHD assistant. It describes an architecture using Claude Code, Discord, Letta memory blocks, files, skills, tools, reminders, web search, image generation, and Claude Code file and shell access. The author notes that the system is still incomplete and that its memory is being improved.

### Source excerpt

Meet Strix. I built Strix initially just as a hack project, but it's become a tremendous help. But also, it's gotten a little weird at times. Strix is a stateful agent. An AI that remembers long after the conversation is finished.

## A fictional story about vanishing messages in Snap's microservices

DevFeed: [A fictional story about vanishing messages in Snap's microservices](<https://devfeed.tech/articles/spooky-stories-the-vanishing-messages-at-snap-tower-35990.md>)

Original publisher: [Read original article](<https://temporal.io/blog/spooky-stories-the-vanishing-messages-at-snap-tower>)

Author: Tim Imkin

Published: 2024-10-31T07:00:00Z

Content type: opinion

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [Messaging](<https://devfeed.tech/topics/messaging.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [Traces](<https://devfeed.tech/topics/traces.md>)

Tags: [community](<https://devfeed.tech/tags/community.md>), [debug](<https://devfeed.tech/tags/debug.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [messages](<https://devfeed.tech/tags/messages.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [snap](<https://devfeed.tech/tags/snap.md>), [traces](<https://devfeed.tech/tags/traces.md>)

### AI overview

A fictional spooky story follows an on-call engineer investigating failures in Snap's microservices, including disappearing messages, queue errors, traces pointing to nonexistent workflows, and unexplained anomalies.

### Source excerpt

They say something strange happens deep within Snap Tower, hidden behind the pristine walls and endless lines of code.

## SharedFlow vs StateFlow

DevFeed: [SharedFlow vs StateFlow](<https://devfeed.tech/articles/sharedflow-vs-stateflow-39374.md>)

Original publisher: [Read original article](<https://kt.academy/article/sharedflow_vs_stateflow>)

Published: 2024-06-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [backend](<https://devfeed.tech/tags/backend.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [messages](<https://devfeed.tech/tags/messages.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [progress](<https://devfeed.tech/tags/progress.md>), [service](<https://devfeed.tech/tags/service.md>), [sharedflow](<https://devfeed.tech/tags/sharedflow.md>), [state](<https://devfeed.tech/tags/state.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [users](<https://devfeed.tech/tags/users.md>), [value](<https://devfeed.tech/tags/value.md>), [websocket](<https://devfeed.tech/tags/websocket.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains the distinction between Kotlin's StateFlow and SharedFlow. StateFlow represents observable application state, while SharedFlow broadcasts events to observers. It discusses replay, required initial values, distinct updates, conflation, and examples for Android and backend services.

### Source excerpt

When to use SharedFlow and when to use StateFlow.

## How We Implemented Large Language Models (LLMs) in the 'Break Into Data' Server in 3 Simple Steps

DevFeed: [How We Implemented Large Language Models (LLMs) in the 'Break Into Data' Server in 3 Simple Steps](<https://devfeed.tech/articles/how-we-implemented-large-language-models-llms-in-the-break-into-data-server-in-3-simple-steps-39165.md>)

Original publisher: [Read original article](<https://merinova.substack.com/p/how-we-implemented-large-language>)

Author: Meri Nova

Published: 2024-02-22T00:19:17Z

Content type: tutorial

Language: en

Sources: [Meri Nova](<https://devfeed.tech/sources/meri-nova.md>)

Topics: [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Discord](<https://devfeed.tech/topics/discord.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [OpenAI](<https://devfeed.tech/topics/openai.md>)

Tags: [database](<https://devfeed.tech/tags/database.md>), [discord](<https://devfeed.tech/tags/discord.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [integrate](<https://devfeed.tech/tags/integrate.md>), [large-language-models-llms](<https://devfeed.tech/tags/large-language-models-llms.md>), [llm](<https://devfeed.tech/tags/llm.md>), [messages](<https://devfeed.tech/tags/messages.md>), [openai](<https://devfeed.tech/tags/openai.md>)

### AI overview

A tutorial describing how the Break Into Data Discord community replaced screenshot-based accountability tracking with an LLM integration that parses natural-language submissions into structured metrics stored in a database. The article explains the limitations of the previous system and the tradeoffs between using forms and an LLM.

### Source excerpt

Learn How To Integrate OpenAI's LLM to Parse, Organize, and Store Discord Messages in A Database.

## Apache Airflow 2.8.0 is here

DevFeed: [Apache Airflow 2.8.0 is here](<https://devfeed.tech/articles/apache-airflow-2-8-0-is-here-32538.md>)

Original publisher: [Read original article](<https://airflow.apache.org/blog/airflow-2.8.0/>)

Author: Apache Airflow

Published: 2023-12-15T00:00:00Z

Content type: release

Language: en

Sources: [Apache Airflow Blog](<https://devfeed.tech/sources/apache-airflow-blog.md>)

Topics: [airflow](<https://devfeed.tech/topics/airflow.md>), [Python](<https://devfeed.tech/topics/python.md>), [Amazon S3](<https://devfeed.tech/topics/amazon-s3.md>), [Azure](<https://devfeed.tech/topics/azure.md>)

Tags: [apache-airflow](<https://devfeed.tech/tags/apache-airflow.md>), [azure](<https://devfeed.tech/tags/azure.md>), [configure](<https://devfeed.tech/tags/configure.md>), [docker](<https://devfeed.tech/tags/docker.md>), [logs](<https://devfeed.tech/tags/logs.md>), [messages](<https://devfeed.tech/tags/messages.md>), [object-storage](<https://devfeed.tech/tags/object-storage.md>), [pypi](<https://devfeed.tech/tags/pypi.md>), [python](<https://devfeed.tech/tags/python.md>), [release](<https://devfeed.tech/tags/release.md>), [release-notes](<https://devfeed.tech/tags/release-notes.md>), [s3](<https://devfeed.tech/tags/s3.md>)

### AI overview

Apache Airflow 2.8.0 is a software release that adds experimental object storage abstractions for systems such as S3, GCS, and Azure Blob Storage, integrates messages from other components into task logs, and introduces dataset listener hooks. It also adds extra index URL support for PythonVirtualEnvOperator and its decorator, including caching for additional Python package repositories.

### Source excerpt

I am thrilled to announce the release of Apache Airflow 2.8.0, featuring a host of significant enhancements and new features that will greatly benefit our community. Details: 📦 PyPI: https://pypi.org/project/apache-airflow/2.8.0/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/2.8.0/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/2.8.0/release_notes.html 🐳 Docker Image: "docker pull apache/airflow:2.8.0" 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-2.8.0 Airflow Object Storage (AIP-58) This feature is experimental and subject to change. Airflow now offers a generic abstraction layer over various object stores like S3, GCS, and Azure Blob Storage, enabling the use of different storage systems in DAGs without code modification. In addition, it allows you to use most of the standard Python modules, like shutil, that can work with file-like objects. Here is an example of how to use the new feature to open a file: from airflow.io.path import ObjectStoragePath base = ObjectStoragePath("s3://my-bucket/", conn_id="aws_default") # conn_id is optional @task def read_file(path: ObjectStoragePath) -> str: with path.open() as f: return f.read() The above example is just the tip of the iceberg. The new feature allows you to configure an alternative backend for a scheme or protocol. Here is an example of how to configure a custom backend for the dbfs scheme: from airflow.io.path import ObjectStoragePath from airflow.io.store import attach from fsspec.implementations.dbfs import DBFSFileSystem attach(protocol="dbfs", fs=DBFSFileSystem(instance="myinstance", token="mytoken")) base = ObjectStoragePath("dbfs://my-location/") For more information: Airflow Object Storage The support for a specific object storage system depends on the installed providers, with out-of-the-box support for the file scheme. Ship logs from other components to Task logs This feature seamlessly integrates task-related messages from various Airflow components, includi

## Gossip Protocol Explained

DevFeed: [Gossip Protocol Explained](<https://devfeed.tech/articles/gossip-protocol-explained-27906.md>)

Original publisher: [Read original article](<http://highscalability.com/blog/2023/7/16/gossip-protocol-explained.html>)

Author: NK

Published: 2023-07-16T16:38:02Z

Content type: article

Language: en

Sources: [High Scalability](<https://devfeed.tech/sources/high-scalability.md>), [High Scalability](<https://devfeed.tech/sources/high-scalability-2.md>)

Topics: [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [P2P](<https://devfeed.tech/topics/p2p.md>), [Availability](<https://devfeed.tech/topics/availability.md>), [consistency](<https://devfeed.tech/topics/consistency.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Resilience](<https://devfeed.tech/topics/resilience.md>), [Network](<https://devfeed.tech/topics/network.md>)

Tags: [availability](<https://devfeed.tech/tags/availability.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [distributed-algorithm](<https://devfeed.tech/tags/distributed-algorithm.md>), [distributed-system](<https://devfeed.tech/tags/distributed-system.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [high-scalability](<https://devfeed.tech/tags/high-scalability.md>), [messages](<https://devfeed.tech/tags/messages.md>), [network](<https://devfeed.tech/tags/network.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [resilience](<https://devfeed.tech/tags/resilience.md>)

### AI overview

This article explains the gossip protocol as a peer-to-peer approach for managing state and communicating between nodes in distributed systems. It describes its relationship to high availability, eventual consistency, scalability, and resilience, and compares it with centralized state management, point-to-point broadcast, and eager reliable broadcast.

### Source excerpt

You can subscribe to the system design newsletter to excel in system design interviews and software architecture. The original article was published on systemdesign.one website. What Is Gossip Protocol? The typical problems in a distributed system are the following [1], [11]: maintaining the system state (liveness of nodes) communication between nodes The potential solutions to these problems are as follows [1]: centralized state management service peer-to-peer state management service

## Gossip Protocol Explained

DevFeed: [Gossip Protocol Explained](<https://devfeed.tech/articles/gossip-protocol-explained-33603.md>)

Original publisher: [Read original article](<https://highscalability.com/gossip-protocol-explained/>)

Author: NK

Published: 2023-07-16T15:38:02Z

Content type: tutorial

Language: en

Sources: [High Scalability](<https://devfeed.tech/sources/high-scalability-3.md>)

Topics: [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>), [Availability](<https://devfeed.tech/topics/availability.md>), [consistency](<https://devfeed.tech/topics/consistency.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Resilience](<https://devfeed.tech/topics/resilience.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [availability](<https://devfeed.tech/tags/availability.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [distributed-algorithm](<https://devfeed.tech/tags/distributed-algorithm.md>), [distributed-system](<https://devfeed.tech/tags/distributed-system.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [messages](<https://devfeed.tech/tags/messages.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [resilience](<https://devfeed.tech/tags/resilience.md>), [scalability](<https://devfeed.tech/tags/scalability.md>)

### AI overview

This article explains the gossip protocol as a peer-to-peer approach for maintaining state and communicating in distributed systems. It contrasts gossip-based state management with centralized services such as Apache Zookeeper and discusses availability, consistency, scalability, resilience, and message-broadcasting techniques.

### Source excerpt

You can subscribe to the system design newsletter to excel in system design interviews and software architecture. The original article was published on systemdesign.one website. What Is Gossip Protocol? The typical problems in a distributed system are the following [1], [11]: maintaining the system state (liveness of nodes) communication

## Nested Transactions and Django Signals Caused Incorrect Payout Notifications

DevFeed: [Nested Transactions and Django Signals Caused Incorrect Payout Notifications](<https://devfeed.tech/articles/one-database-transaction-too-many-33899.md>)

Original publisher: [Read original article](<https://hakibenita.com/django-nested-transaction>)

Author: Haki Benita

Published: 2021-06-06T21:00:00Z

Content type: article

Language: en

Sources: [Haki Benita](<https://devfeed.tech/sources/haki-benita.md>)

Topics: [Transactions](<https://devfeed.tech/topics/transactions.md>), [Django](<https://devfeed.tech/topics/django.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [database](<https://devfeed.tech/tags/database.md>), [django](<https://devfeed.tech/tags/django.md>), [messages](<https://devfeed.tech/tags/messages.md>), [orm](<https://devfeed.tech/tags/orm.md>), [transactions](<https://devfeed.tech/tags/transactions.md>), [users](<https://devfeed.tech/tags/users.md>)

### AI overview

This article examines how nested database transactions and Django signals caused users to receive payout notifications before their payments were reliably completed. It uses the incident to explain a lesson about coordinating transaction state and notifications.

### Source excerpt

A story about how I ended up sending hundreds of users messages saying they got paid when they didn't! In the process we've learned a valuable lesson about nested transactions and Django signals.

## Designing Clear, Actionable Error Messages for Framework and Library Users

DevFeed: [Designing Clear, Actionable Error Messages for Framework and Library Users](<https://devfeed.tech/articles/write-errors-that-don-t-make-me-think-35827.md>)

Original publisher: [Read original article](<https://temporal.io/blog/error-message-design>)

Author: Shawn Wang

Published: 2020-11-19T04:00:00Z

Content type: opinion

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [Exception](<https://devfeed.tech/topics/exception.md>), [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [debugging](<https://devfeed.tech/topics/debugging.md>)

Tags: [debugging](<https://devfeed.tech/tags/debugging.md>), [error-messages](<https://devfeed.tech/tags/error-messages.md>), [framework](<https://devfeed.tech/tags/framework.md>), [go](<https://devfeed.tech/tags/go.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [library](<https://devfeed.tech/tags/library.md>), [messages](<https://devfeed.tech/tags/messages.md>)

### AI overview

The article argues that cryptic and poorly considered error messages worsen debugging and bug reporting. It presents Temporal's error-message style guidance and broader principles for making errors actionable and providing meaningful context for users and maintainers.

### Source excerpt

There is nothing more frustrating than a cryptic error message.

## AWS SQS Pro Tip - Lower Your Costs By Batching Up Data

DevFeed: [AWS SQS Pro Tip - Lower Your Costs By Batching Up Data](<https://devfeed.tech/articles/aws-sqs-pro-tip-lower-your-costs-by-batching-up-data-28126.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/aws/2020/07/20/aws-sqs-pro-tip-lower-your-costs-by-batching-up-data.html>)

Author: Fuzzygroup

Published: 2020-07-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [JSON](<https://devfeed.tech/topics/json.md>), [data](<https://devfeed.tech/topics/data.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [batching](<https://devfeed.tech/tags/batching.md>), [cost](<https://devfeed.tech/tags/cost.md>), [data](<https://devfeed.tech/tags/data.md>), [data-pipeline](<https://devfeed.tech/tags/data-pipeline.md>), [messages](<https://devfeed.tech/tags/messages.md>), [sqs](<https://devfeed.tech/tags/sqs.md>)

### AI overview

The article describes batching small JSON blobs into larger messages before sending them to Amazon SQS. It explains measuring blob sizes, building arrays below the 256,000-byte packet limit, serializing them as JSON, and unpacking them when received. The approach adds queue-processing overhead but reduced costs for a large-scale data pipeline.

### Source excerpt

This one is a short one but a good one. I've been using SQS (disclaimer - I love SQS) lately for a large scale data pipeline. We are processing literally billions of small JSON blobs and in our cost modeling, we initially came up with an estimate that made SQS something that we couldn't use because of the number of JSON blobs. And then one of our people, thank you Don Neufeld, came up with the idea of batching up the JSON blobs and having SQS give us a batch that we could process. And while this did complicate our queue processing a bit, it made SQS cost effective. Here were the key things: When we initially loaded the queue, we measured each blob's length and then built an array of blobs until we were just below the maximum packet size, 256_000 bytes. We then serialized the array into JSON and gave that JSON to SQS. Our routine which read things back off the queue looked something like this: messages = sqs_client.receive_message(QueueUrl=input_queue.url, MaxNumberOfMessages=MAX_QUEUE_MESSAGES) if 'Messages' in messages: # when the queue is exhausted, the response dict contains no 'Messages' key for message in messages['Messages']: # 'Messages' is a list message_bodies = json.loads(message['Body']) for json_str in message_bodies: Yes this was a bit more overhead but it has worked tremendously well and let us take full advantage of SQS without running up a huge bill. Recommended.

## A Conceptual Architecture for a Filesystem to SQS Loader

DevFeed: [A Conceptual Architecture for a Filesystem to SQS Loader](<https://devfeed.tech/articles/a-conceptual-architecture-for-a-filesystem-to-sqs-loader-28185.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/lambda/2020/06/12/a-conceptual-architecture-for-a-filesytem-to-sqs-loader.html>)

Author: Fuzzygroup

Published: 2020-06-12T00:00:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [AWS Lambda](<https://devfeed.tech/topics/aws-lambda.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [Docker](<https://devfeed.tech/topics/docker.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [aws](<https://devfeed.tech/tags/aws.md>), [aws-lambda](<https://devfeed.tech/tags/aws-lambda.md>), [container](<https://devfeed.tech/tags/container.md>), [files](<https://devfeed.tech/tags/files.md>), [json](<https://devfeed.tech/tags/json.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [messages](<https://devfeed.tech/tags/messages.md>), [queue](<https://devfeed.tech/tags/queue.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [sqs](<https://devfeed.tech/tags/sqs.md>)

### AI overview

The article proposes a conceptual architecture for loading JSON messages from a filesystem into Amazon SQS. It considers replacing a single Rust file processor with AWS Lambda functions, a network-accessible filesystem, and Redis-based tracking for files already processed.

### Source excerpt

I have an interesting technical situation facing me: A docker container which runs persistently and writes JSON files to a directory Each JSON file contains short form messages with JSON encoding along a variety of metadata fields Each file is idempotent i.e. once it exists in the directory will never be written to again Each file is named for a timestamp Each file needs to: Have ridiculous, non-JSON comments removed from the beginning Be parsed into json There is roughly 6000 of these JSON things coming in per second Have only a selection of the JSON internally be selected Be batched into a collection up to the maximum size the SQS supports and then committed to SQS Be processed only once Note: SQS is the AWS "Simple Queue Service". A queue is a specialized data structure which hands data off for processing by other tasks. My initial thinking to handle this was to use Rust to write a high performance file processor. This appealed to me: New technical challenge; I don't know Rust Manly - writing fast code is a conveniently macho challenge Simple architecture - one box, one process watching a directory and ripping through files There are, naturally, problems here: The Rust program represents a SPOF or "Single Point of Failure"; things break This architecture is simple but making it not be a SPOF means the architecture gets complex We don't actually even know if a single Rust executable is fast enough to handle all the data Rust is complex and even simple things take dramatically more code than a scripting language like Ruby or Python. There isn't anything wrong with Rust (I really like the language but learning it is non-trivial). Thinking through all these issues as well as learning, by chance, that the runtime execution period for AWS lambda serverless functions had increased from 5 minutes to 15 minutes made me think in terms of a different architecture focused on using lambdas. Note: A lambda is a self contained bit of code that you give over to AWS to manage on

## Taking Control of One's Workaholic Tendencies - The IT Anonymous Edition

DevFeed: [Taking Control of One's Workaholic Tendencies - The IT Anonymous Edition](<https://devfeed.tech/articles/taking-control-of-one-s-workaholic-tendencies-the-it-anonymous-edition-28340.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/startup/2020/04/20/taking-control-of-one-s-workaholic-tendencie.html>)

Author: Fuzzygroup

Published: 2020-04-20T00:00:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Agile](<https://devfeed.tech/topics/agile.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [Slack](<https://devfeed.tech/topics/slack.md>), [zoom](<https://devfeed.tech/topics/zoom.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [aws](<https://devfeed.tech/tags/aws.md>), [jira](<https://devfeed.tech/tags/jira.md>), [messages](<https://devfeed.tech/tags/messages.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [retrospective](<https://devfeed.tech/tags/retrospective.md>), [services](<https://devfeed.tech/tags/services.md>), [startup](<https://devfeed.tech/tags/startup.md>), [team](<https://devfeed.tech/tags/team.md>), [technology](<https://devfeed.tech/tags/technology.md>), [work](<https://devfeed.tech/tags/work.md>), [zoom](<https://devfeed.tech/tags/zoom.md>)

### AI overview

A personal, humorous account of workaholic behavior during an MVP delivery, including severe sleep deprivation, pressure from a manager, shifting Jira epics and requirements, and poorly timed meetings about AWS services and handoff.

### Source excerpt

Please start by picturing a support group similar to Alcoholics Anonymous; Let's call it IT Anonymous: A dingy room in a church somewhere A coffee pot Cookies or donuts Chairs in a semi circle A place for people to stand and address the group We all know the drill - we've seen this scene a thousand times in movies or TV. And then you see me stand and address the group: Hi. I'm Scott. and the group responds with a chorus of: Hi Scott! and then begins the confession: "I ... have a problem. I need help!" and then: "Tell us more" I respond with: "I work in technology and I'm a workaholic. Last week I, the throes of getting an MVP out the door, with a boss that has been asking me daily Is It Done Yet? / Got Anything for me to See?, I got it done by all the Gods and Goddesses but I slept less than 8 hours out of the final 72 - I delivered. And yes I was late but by 2 days. But, at the end of our Weekly Agile Retrospective, I got to demo working code to our team. This occurred at 2:55 pm on Friday at which point I was close to falling over tired. And the reward for all this was to be scheduled into a 7 person Zoom meeting at 4:00 pm on a Friday to discuss AWS Services we use and AWS Key Handoff. This was NOT an important thing that had to be done after successfully completing my goals. And then, in a show of personal stupidity on my part, I noticed my boss was online Saturday night at midnight my time. And, in an effort to be a dutiful corporate solider, I, yes I'm a moron, asked him What epic should I start on on Monday morning?. My boss is three hours time offset from myself so this actually made some sense. And I had, per his direction created epics for all the outstanding tasks that I was aware of. I put them into Jira as I struggled mightily to get this MVP done. And, rather than being told to complete one of my existing Epics, a new Epic was named on the spot and a series of requirements were delivered to me via slack messages. And then there was the fateful question:

## Making Urls Paste with Metadata Preview In Facebook, Facebook Messenger, Twitter, Apple Messages

DevFeed: [Making Urls Paste with Metadata Preview In Facebook, Facebook Messenger, Twitter, Apple Messages](<https://devfeed.tech/articles/making-urls-paste-with-metadata-preview-in-facebook-facebook-messenger-twitter-apple-messages-28355.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/webdev/2020/03/14/making-urls-paste-with-metadata-preview-in-facebook-messenger-twitter-apple-messages.html>)

Author: Fuzzygroup

Published: 2020-03-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [HTML](<https://devfeed.tech/topics/html.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [facebook](<https://devfeed.tech/tags/facebook.md>), [html](<https://devfeed.tech/tags/html.md>), [messages](<https://devfeed.tech/tags/messages.md>), [messenger](<https://devfeed.tech/tags/messenger.md>), [twitter](<https://devfeed.tech/tags/twitter.md>), [web-development](<https://devfeed.tech/tags/web-development.md>), [webdev](<https://devfeed.tech/tags/webdev.md>)

### AI overview

A tutorial explaining how HTML metadata controls URL previews when links are pasted into Facebook Messenger, Apple Messages, Facebook, and Twitter. It describes using platform-specific meta tags and testing the result with the Facebook Sharing Debugger.

### Source excerpt

I am an old tech guy. I was at the conference where TBL announced the web and I wrote my first HTML snippet just a few years later. But I pretty quickly moved from front end HTML onto back end web development and there are techniques that, while common today, I have never learned. An example of this is making urls appear, with metadata, when they are pasted into a messaging tool like: Facebook Messenger Apple Messages Facebook itself Twitter itself We've all seen this. Sometimes you paste a url into Facebook Messenger and all that comes out is the url itself. And sometimes you get a picture, a title, etc. The secret to this is three fold: A set of HTML meta tags for Facebook A set of HTML meta tags for Twitter Testing it in a debugging tool like the Facebook Sharing Debugger Step 1: The HTML Meta Tags for Facebook Here is an example of the HTML meta tags for Facebook: <meta name="twitter:card" content="summary"/> <meta name="twitter:site" content="@fuzzygroup"/> <meta name="twitter:creator" content="@fuzzygroup"/> <meta name="twitter:title" content="www.covidnearme.org -- a web site for tracking COVID-19 near you"/> <meta name="twitter:description" content="www.covidnearme.org - an easy to use web site for watching the spread of COVID-19 in your country and / or state"/> <meta name="twitter:image" content="https://covidnearme.org/assets/covid-5c8b7d67715397bef73ccaf0ee4402a1952d97123328aeb2db839ca071583c98.png"/> Step 2: The HTML Meta Tags for Twitter Here is an example of the HTML meta tags for Twitter: <meta property="og:url" content="https://www.covidnearme.org/" /> <meta property="og:type" content="website" /> <meta property="og:locale" content="en_US"> <meta property="og:title" content="www.covidnearme.org -- a web site for tracking COVID-19 near you" /> <meta property="og:description" content="www.covidnearme.org - an easy to use web site for watching the spread of COVID-19 in your country and / or state" /> <meta property="og:image" content="https://covidnear

## Why encrypted email remains unsafe, according to the article

DevFeed: [Why encrypted email remains unsafe, according to the article](<https://devfeed.tech/articles/stop-using-encrypted-email-29173.md>)

Original publisher: [Read original article](<https://www.latacora.com/blog/2020/02/19/stop-using-encrypted-email/>)

Published: 2020-02-19T18:50:00Z

Content type: opinion

Language: en

Sources: [Latacora](<https://devfeed.tech/sources/latacora.md>)

Topics: [email](<https://devfeed.tech/topics/email.md>), [Encryption](<https://devfeed.tech/topics/encryption.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Security](<https://devfeed.tech/topics/security.md>), [Internet](<https://devfeed.tech/topics/internet.md>)

Tags: [cryptography](<https://devfeed.tech/tags/cryptography.md>), [email](<https://devfeed.tech/tags/email.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [internet](<https://devfeed.tech/tags/internet.md>), [messages](<https://devfeed.tech/tags/messages.md>), [pgp](<https://devfeed.tech/tags/pgp.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [security](<https://devfeed.tech/tags/security.md>), [signal](<https://devfeed.tech/tags/signal.md>)

### AI overview

The article argues that encrypted email remains unsafe even if flaws in current tools such as PGP are fixed. It attributes the problem to email's plaintext-oriented foundations and the likelihood of unencrypted replies, and advises against sending messages that require serious security over email.

### Source excerpt

Email is unsafe and cannot be made safe. The tools we have today to encrypt email are badly flawed. Even if those flaws were fixed, email would remain unsafe. Its problems cannot plausibly be mitigated. Avoid encrypted email. Technologists hate this argument. Few of them specialize in cryptography or privacy, but all of them are interested in it, and many of them tinker with encrypted email tools. Most email encryption on the Internet is performative, done as a status signal or show of solidarity. Ordinary people don't exchange email messages that any powerful adversary would bother to read, and for those people, encrypted email is LARP security. It doesn't matter whether or not these emails are safe, which is why they're encrypted so shoddily.

## Encapsulating View State

DevFeed: [Encapsulating View State](<https://devfeed.tech/articles/encapsulating-view-state-30593.md>)

Original publisher: [Read original article](<https://ryanharter.com/blog/2019/07/encapsulating-view-state/>)

Published: 2019-07-19T16:00:00Z

Content type: tutorial

Language: en

Sources: [Blogs on Ryan Harter](<https://devfeed.tech/sources/blogs-on-ryan-harter.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [App](<https://devfeed.tech/topics/app.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [app-architecture](<https://devfeed.tech/tags/app-architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [error](<https://devfeed.tech/tags/error.md>), [livedata](<https://devfeed.tech/tags/livedata.md>), [messages](<https://devfeed.tech/tags/messages.md>), [testing](<https://devfeed.tech/tags/testing.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

This article presents an approach to encapsulating view state in Android applications with AndroidX ViewModel. It explains how putting business logic and decision-making code in ViewModels can simplify Activities and Fragments and make the valuable code easier to test.

### Source excerpt

The AndroidX ViewModel has become a central component in many modern Android apps. They offer a relatively simple abstraction to encapsulate business logic and decision making code which separates it from the platform frameworks, which are often difficult to test. Since ViewModels are easier to test than Framework classes like Activity and Fragment due to their simple lifecycles and lack of external dependencies, it makes sense to try to put as much logic, the complex decision-making code that should be tested, in ViewModels as possible. Ideally we'll be left with a view layer, either Activities, Fragments, or something else, which is so simple that it's not worth testing.

[Next page](<https://devfeed.tech/tags/messages.md?cursor=WyIyMDE5LTA3LTE5VDE2OjAwOjAwKzAwOjAwIiwgImJlMjg3MTk5LWM4ZmEtNDQzMS1iMWJkLWI5NzY0ZTY3MjAzZiJd>)