Emissions fell by 4% in Q1 and 2.6% in Q2, while GDP grew by 0.3% and 1%, respectively, compared to the same quarters in 2023, according to the latest statistics. This demonstrates that climate action and economic growth can go hand in hand : https://ec.europa.eu/eurostat/en/web/products-eurostat-news/w/ddn-20241115-2
Alpine.js : Alpine is a rugged, minimal tool for composing behavior directly in your markup. Think of it like jQuery for the modern web. Plop in a script tag and get going.
Something in between a Product Manager and a Software Engineer : Product Engineer i.e. PMs are sometimes not enough technical and SWEs are sometimes not enough product oriented https://refactoring.fm/p/how-to-become-a-product-engineer
Meta, for instance, trained its new Llama 3 models with about 10 times more data and 100 times more compute than Llama 2. Amid a chip shortage, it used two 24,000 GPU clusters, with each chip running around the price of a luxury car. It employed so much data in its AI work, it considered buying the publishing house Simon & Schuster to find more.
Redis forks (after the licence change) : – redict : https://redict.io/ Drew DeVault + others? – valkey : https://valkey.io/ backed by AWS, Google, Oracle, Ericsson, and Snap, with the Linux Foundation; more to come imo.
golang fasthttp (replacement for standard net/http if you need “to handle thousands of small to medium requests per second and needs a consistent low millisecond response time”. “Currently fasthttp is successfully used by VertaMedia in a production serving up to 200K rps from more than 1.5M concurrent keep-alive connections per physical server.” https://github.com/valyala/fasthttp
I find truly interesting the point around promoting a write culture (Execs/Directors in tech blog, SWEs on tech blogs/internal technical documents) : https://newsletter.pragmaticengineer.com/i/140970283/writing-culture I’m a long-time believer that writing clarifies thinking more than talking and writing persists information, makes it searchable, talking does not. “Verba volant, scripta manent” as the Latins use to say. But this idea shifted into “just enough” documentation (which means it is not necessary) in SW engineering latest methodologies so it is interesting that a multi billion company like stripe is going totally against the tide.
HTTP (REST) and WebSocket, with support for end-to-end encryption (E2EE)
Identity Management
Tied to server domain (e.g., @user@domain.com), uses WebFinger for discovery
Portable DIDs for decentralized identity
Tied to server domain but portable; user ID format is @user:domain.com
Federation
Federated, allowing instances to share content and social connections across domains
Federated with content and algorithm control
Federated, with real-time, synchronized state across servers
Interoperability
Widely interoperable with other ActivityPub-compliant platforms in the Fediverse
Designed for custom app experiences, interoperability is in development
Supports interoperability with other Matrix clients; bridges to other protocols (e.g., Slack, IRC)
End-to-End Encryption
Not native to protocol but possible with extensions
Not natively specified
Built-in and widely supported, particularly in 1:1 and group chats
Moderation
Instance-based moderation policies, customizable filters and blocks
User-level and instance-level moderation, customizable algorithms
Room-level moderation, with granular permissions for room admins
Popular Platforms
Mastodon, PeerTube, Pixelfed, WriteFreely
Bluesky Social, upcoming decentralized apps
Element (main Matrix client), Synapse (server), bridges for Slack, Discord, Telegram, etc.
Summary of Key Differences
ActivityPub is best suited for federated social networking, particularly for applications that prioritize openness and content sharing across platforms in the Fediverse. It uses an Activity-Object model with JSON-LD and supports instance-based identity.
AT Protocol focuses on user control over content algorithms and portable identities using DIDs, with a vision for interoperability in custom social applications. It is also designed for federated social networks but with more control over data portability and algorithmic transparency.
Matrix Protocol excels in real-time, federated communication, supporting secure, encrypted messaging with granular moderation capabilities. It’s heavily used for chat, VoIP, and collaborative tools, emphasizing interoperability with other platforms through bridges.
Some people aren’t able to think/design a software algorithm without writing the code that implements it; some other can just think/rethink at an algorithm without even writing a single line of code until it is almost totally clear in their mind, and then they code it. These are two extremes of the different approaches to designing/implementing and algorithm. Of course mixed approaches are what happen normally but let’s try to identify the extreme sides in terms of how they work.
Code-First Approach (Bottom-up or Implementation-Driven Approach):
This approach involves thinking through the problem by immediately writing code.
Developers using this method tend to experiment with implementations as they go.
It’s often associated with a more hands-on, trial-and-error style of problem-solving.
This approach can be beneficial for smaller problems or when working with familiar concepts.
It might be referred to as “thinking with your fingers” or “coding to think.”
Design-First Approach (Top-down or Conceptual Approach):
This approach involves thoroughly thinking through and designing the algorithm before writing any code.
Developers using this method often use abstract thinking, mental models, or visual aids like flowcharts or pseudocode.
It’s associated with a more theoretical or analytical style of problem-solving.
This approach is often beneficial for complex problems or when designing large-scale systems.
It might be referred to as “whiteboard coding” (even if no actual whiteboard is used) or “algorithmic thinking.”
Both approaches have their merits and can be effective depending on the situation, the complexity of the problem, and the individual developer’s style. Many experienced developers can switch between these approaches as needed.
It’s worth noting that in practice, many developers use a combination of both approaches, iterating between design and implementation as they work through a problem. This hybrid approach allows for both conceptual planning and practical experimentation.
Some related concepts and methodologies that incorporate aspects of these approaches include:
Test-Driven Development (TDD): Writing tests before implementation, which can be seen as a form of design-first thinking.
Rapid Prototyping: Quickly implementing ideas to test them, which aligns more with the code-first approach.
Model-Driven Development: Focusing on creating and analyzing domain models before implementation, which is more aligned with the design-first approach.
Understanding these different approaches can help developers recognize their own problem-solving styles and potentially expand their toolkit by practicing alternative methods when appropriate.