Optimizing Compute-Intensive Serverless Workloads with Multi-threaded Rust on AWS Lambda

Post Syndicated from Daniel Abib original https://aws.amazon.com/blogs/compute/optimizing-compute-intensive-serverless-workloads-with-multi-threaded-rust-on-aws-lambda/

Customers use AWS Lambda to build Serverless applications for a wide variety of use cases, from simple API backends to complex data processing pipelines. Lambda’s flexibility makes it an excellent choice for many workloads, and with support for up to 10,240 MB of memory, you can now tackle compute-intensive tasks that were previously challenging in a Serverless environment. When you configure a Lambda function’s memory size, you allocate RAM and Lambda automatically provides proportional CPU power. When you configure 10,240 MB, your Lambda function has access to up to 6 vCPUs.

However, there’s an important consideration that many developers discover: simply allocating more memory may not automatically make your function faster. If your code runs sequentially, it will only use one vCPU regardless of how many are available. The remaining vCPUs sit idle while you’re still paying for the full memory allocation.

To help benefit from Lambda’s multi-core capabilities, your code should explicitly implement concurrent processing through multi-threading or parallel execution. Without this, you’re paying for compute power you’re not using.

Rust provides excellent support for this pattern. The AWS Lambda Rust Runtime provides developers with a language that combines exceptional performance with built-in concurrency primitives. In this post, we show you how to implement multi-threading in Rust to achieve 4-6x performance improvements for CPU-intensive workloads.

Our Test Workload: Why Bcrypt Password Hashing?

For this analysis, we use bcrypt password hashing as our CPU-intensive workload to evaluate multi-core scaling behavior. This choice is deliberate for several reasons:

  1. Real-world relevance: Bcrypt is commonly used in authentication systems, making our benchmarks practically relevant rather than synthetic.
  2. Predictable CPU work: Bcrypt with cost factor 10 provides approximately 100ms of pure CPU work per operation on typical hardware, creating a consistent and measurable baseline.
  3. Embarrassingly parallel: Each hash operation is completely independent, making it an ideal candidate for parallel processing without shared state or lock contention.
  4. CPU-bound: Bcrypt is deterministic and CPU-bound (not memory or I/O bound), isolating the performance characteristics we want to measure.

Throughout this post, we process batches of passwords and measure how multi-threading improves throughput as we scale from 1 to 6 vCPUs.

Understanding Lambda’s vCPU Allocation

AWS Lambda allocates CPU resources proportionally to the configured memory. According to AWS Lambda function memory documentation, at 1,769 MB a function has the equivalent of one vCPU.

vCPU Allocation by Memory:

Memory (MB)

Approximate vCPUs
128 – 1,769 ~1
1,770 – 3,538 ~2
3,539 – 5,307 ~3
5,308 – 7,076 ~4
7,077 – 8,845 ~5
8,846 – 10,240

~6

Note: The num_cpus crate returns the number of logical CPUs visible to the Lambda environment, which may differ from the allocated vCPU share. At lower memory configurations, you may see 2 CPUs reported even though only 1 vCPU worth of compute time is allocated.

Solution Overview

The solution consists of a Rust Lambda function that:

  1. Receives a request specifying the number of items to process
  2. Detects available vCPUs and configures a thread pool accordingly
  3. Processes items in parallel using the Rayon library (a data parallelism library that allows you to convert sequential iterators into parallel ones with a .par_iter() call)
  4. Returns performance metrics including duration and throughput

Architecture Diagram: Lambda receives request, initializes Rayon thread pool based on WORKER_COUNT environment variable, processes bcrypt hashes in parallel across multiple vCPUs, and returns results.

Creating a Multi-threaded Rust Lambda Function

Create a new Lambda project using Cargo Lambda:

cargo lambda new rust-multithread-demo
cd rust-multithread-demo

Dependencies

Update Cargo.toml with the necessary dependencies:

[package]
name = "rust-multithread-lambda"
version = "0.1.0"
edition = "2021"

[dependencies]
lambda_runtime = "1.0.0"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bcrypt = "0.15"
rayon = "1.7"
num_cpus = "1.16"

[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true

The optimization flags in [profile.release] reduce binary size and improve performance:

  • opt-level = 3: Maximum optimization
  • lto = true: Link-time optimization for smaller binaries
  • strip = true: Remove debug symbols

Implementing the Lambda Entry Point

First, let’s look at how we initialize the thread pool during cold start:

src/main.rs:

use lambda_runtime::{run, service_fn, Error, LambdaEvent};
mod handler;
use handler::{function_handler, get_worker_count, init_thread_pool, ProcessRequest};

#[tokio::main]
async fn main() -> Result<(), Error> {
    // Initialize Rayon thread pool at cold start (once per container lifecycle)
    init_thread_pool(get_worker_count());

    run(service_fn(|event: LambdaEvent<ProcessRequest>| async move {
        function_handler(event.payload).await
    }))
    .await
}

Why initialize in main() and not in the handler?

  1. Deterministic Configuration: The thread pool is configured once per container, before any requests arrive. This prevents race conditions if multiple requests try to initialize concurrently.
  2. Container Reuse: Lambda containers can serve multiple requests. Initializing in main() ensures the configuration is set during the cold start and persists for all subsequent warm invocations.
  3. Performance: Thread pool setup happens during cold start (already counted as initialization time), not during request processing.

Implementing the Request Handler

src/handler.rs:

use serde::{Deserialize, Serialize};
use std::env;
use std::sync::Once;
use std::time::Instant;
use std::collections::HashSet;
use std::sync::Mutex;
use rayon::prelude::*;

static INIT: Once = Once::new();

#[derive(Deserialize)]
pub struct ProcessRequest {
    count: usize,
    mode: String,
}

#[derive(Serialize)]
pub struct ProcessResponse {
    processed: usize,
    duration_ms: u128,
    mode: String,
    workers: usize,
    detected_cpus: usize,
    avg_ms_per_item: f64,
    memory_used_kb: u64,
    threads_used: usize, // Actual threads that processed items (proves multi-threading)
}

// CPU-intensive bcrypt hashing with cost factor 10
fn hash_password(password: &str) -> Result<String, bcrypt::BcryptError> {
    bcrypt::hash(password, 10)
}

// Process items one at a time (baseline for comparison)
fn process_sequential(items: Vec<String>) -> Result<(Vec<String>, usize), Box<dyn std::error::Error + Send + Sync>> {
    let results: Result<Vec<String>, _> = items
        .iter()
        .map(|item| hash_password(item))
        .collect();
    results
        .map(|r| (r, 1))
        .map_err(|e| Box::new(e) as Box<dyn std::error::Error + Send + Sync>)
}

// Process items in parallel using Rayon's work-stealing scheduler
// Thread pool size is configured once at cold start via init_thread_pool()
fn process_parallel(items: Vec<String>) -> Result<(Vec<String>, usize), Box<dyn std::error::Error + Send + Sync>> {
    let thread_ids: Mutex<HashSet<std::thread::ThreadId>> = Mutex::new(HashSet::new());

    let results: Result<Vec<String>, _> = items
        .par_iter()
        .map(|item| {
            thread_ids.lock().unwrap().insert(std::thread::current().id());
            hash_password(item)
        })
        .collect();

    let threads_used = thread_ids.lock().unwrap().len();
    results
        .map(|r| (r, threads_used))
        .map_err(|e| Box::new(e) as Box<dyn std::error::Error + Send + Sync>)
}

// Get worker count from env var or detect CPUs, clamped to 1-6
pub fn get_worker_count() -> usize {
    if let Ok(count_str) = env::var("WORKER_COUNT") {
        if let Ok(count) = count_str.parse::<usize>() {
            return count.clamp(1, 6);
        }
    }
    num_cpus::get().clamp(1, 6)
}

// Initialize Rayon global thread pool (only once per Lambda container)
pub fn init_thread_pool(workers: usize) {
    INIT.call_once(|| {
        let _ = rayon::ThreadPoolBuilder::new()
            .num_threads(workers)
            .build_global();
    });
}

// Read RSS memory from /proc/self/statm (Linux only)
fn get_memory_usage_kb() -> u64 {
    std::fs::read_to_string("/proc/self/statm")
        .ok()
        .and_then(|s| s.split_whitespace().nth(1)?.parse::<u64>().ok())
        .map(|pages| pages * 4)
        .unwrap_or(0)
}

// Main Lambda handler - processes items sequentially or in parallel
pub async fn function_handler(request: ProcessRequest) -> Result<ProcessResponse, Box<dyn std::error::Error + Send + Sync>> {
    if request.count == 0 { return Err("count must be greater than 0".into()); }
    if request.count > 1000 { return Err("count exceeds maximum of 1000 items".into()); }

    let items: Vec<String> = (0..request.count)
        .map(|i| format!("password_{:06}", i))
        .collect();

    let workers = get_worker_count();
    let mode = match request.mode.as_str() {
        "sequential" => "sequential",
        "parallel"   => "parallel",
        _            => if workers > 1 { "parallel" } else { "sequential" },
    };

    let start = Instant::now();
    let (results, threads_used) = match mode {
        "sequential" => process_sequential(items)?,
        _            => process_parallel(items)?,
    };
    let duration_ms = start.elapsed().as_millis();

    Ok(ProcessResponse {
        processed: results.len(),
        duration_ms,
        mode: mode.to_string(),
        workers: if mode == "parallel" { workers } else { 1 },
        detected_cpus: num_cpus::get(),
        avg_ms_per_item: duration_ms as f64 / request.count as f64,
        memory_used_kb: get_memory_usage_kb(),
        threads_used,
    })
}

Key Implementation Details

Thread Pool Initialization at Cold Start: The code initializes the thread pool in main() before the Lambda runtime starts, not during request processing. This approach is designed to eliminate race conditions and provide deterministic behavior across all invocations.

Important Note: Lambda initializes the thread pool once per container. The thread pool configuration retains its original value even if you change the WORKER_COUNT environment variable between invocations within the same container. For production deployments, keep WORKER_COUNT consistent for the function’s lifecycle.

Input Validation: The handler validates that count is between 1 and 1000 to prevent resource exhaustion.

Thread Tracking: The threads_used field proves multi-threading is working by tracking unique thread IDs during parallel processing. This provides empirical validation that work is distributed across multiple threads.

Memory Tracking: The memory_used_kb field reports RSS memory usage by reading /proc/self/statm, providing visibility into actual memory consumption.

Mode Selection: The function supports three modes:

  • sequential: Single-threaded processing
  • parallel: Multi-threaded processing using Rayon
  • auto: Automatically selects based on available workers

Building and Deploying

With the implementation complete, let’s compile the function for Lambda’s environment and deploy it to AWS.

# Build for ARM64 (Graviton2) - recommended for cost efficiency
cargo lambda build --release --arm64

# Or build for x86_64
cargo lambda build --release --x86-64

The build process produces a binary of approximately 1.7 MB (uncompressed) or 0.8 MB (zipped).

Deploy to AWS

Use Cargo Lambda to deploy the function with your desired memory configuration and worker count.

# Deploy with 6144 MB memory (4 vCPUs) and 4 workers
cargo lambda deploy rust-multithread-lambda \
    --memory 6144 \
    --timeout 30 \
    --env-var WORKER_COUNT=4

Note: To test different configurations, repeat the build and deploy commands with different --memory values and WORKER_COUNT settings for each configuration you want to benchmark. For comprehensive testing across architectures, build with --arm64, deploy all memory configurations, then rebuild with --x86-64 and deploy again.

Required IAM Permissions

The Lambda execution role needs the following permissions:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

Test the Function

After deployment, verify the function works correctly by invoking it with a test payload.

aws lambda invoke \
    --function-name rust-multithread-lambda \
    --payload '{"count":20,"mode":"parallel"}' \
    --cli-binary-format raw-in-base64-out \
    response.json

Performance Benchmarks

We tested multiple configurations on ARM64 (Graviton2) to measure the impact of multi-threading.

Test workload: Processing 20 bcrypt password hashes (cost factor 10)

Note: Benchmark results may vary between runs due to factors such as Lambda placement, underlying hardware differences, and AWS infrastructure conditions. The numbers presented here are representative of typical performance observed across multiple test runs.

Performance Results: ARM64 (Graviton2)

Memory vCPUs Workers Avg (ms) P50 (ms) P95 (ms) P99 (ms) Min Max Speedup
1536 MB ~1 1 1,885 1,882 1,898 1,898 1,877 1,907 1.00x
2048 MB ~2 2 1,334 1,331 1,341 1,341 1,324 1,356 1.41x
4096 MB ~3 3 685 683 699 699 669 704 2.75x
6144 MB ~4 4 463 464 467 467 453 469 4.07x
8192 MB ~5 5 338 343 345 345 325 346 5.57x
10240 MB ~6 6 280 278 292 292 271 293 6.73x

Performance Results: x86_64

Memory vCPUs Workers Avg (ms) P50 (ms) P95 (ms) P99 (ms) Min Max Speedup
1536 MB ~1 1 1,671 1,675 1,681 1,681 1,659 1,684 1.00x
2048 MB ~2 2 1,253 1,249 1,265 1,265 1,241 1,294 1.33x
4096 MB ~3 3 892 891 899 899 888 900 1.87x
6144 MB ~4 4 429 425 443 443 417 449 3.89x
8192 MB ~5 5 330 323 349 349 317 358 5.06x
10240 MB ~6 6 292 292 298 298 291 298 5.72x

Architecture Comparison

Memory Workers ARM64 Avg x86_64 Avg Diff % Faster Arch
1536 MB 1 1,885 ms 1,671 ms -12.8% x86_64
2048 MB 2 1,334 ms 1,253 ms -6.4% x86_64
4096 MB 3 685 ms 892 ms +23.2% ARM64
6144 MB 4 463 ms 429 ms -7.9% x86_64
8192 MB 5 338 ms 330 ms -2.4% x86_64
10240 MB 6 280 ms 292 ms +4.1% ARM64

Key Observations

Cold Start Performance: Rust’s cold start initialization times are consistently between 19-28 ms across all memory configurations and architectures. ARM64 (Graviton2) shows slightly faster cold starts (19-23 ms) compared to x86_64 (26-29 ms). Both are significantly faster than interpreted runtimes because the binary is pre-compiled.

Near-Linear Scaling: Both architectures achieve impressive speedups:

  • ARM64: 6.73x speedup with 6 workers (exceeds theoretical 6x!)
  • x86_64: 5.72x speedup with 6 workers

Latency Consistency: The P95 and P99 metrics show excellent consistency:

  • ARM64 at 6 vCPUs: P50=278ms, P95=292ms, P99=292ms (low variance)
  • x86_64 at 6 vCPUs: P50=292ms, P95=298ms, P99=298ms

Both architectures show consistent latency at maximum parallelization.

Cost Analysis

Let’s analyze the cost implications of different configurations for processing 20 bcrypt hashes.

Cost Comparison: ARM64 vs x86_64 (us-east-1, as of January 2026):

Config Memory Workers ARM64 Duration ARM64 Cost/1M x86_64 Duration x86_64 Cost/1M Cheaper Arch
1 vCPU 1536 MB 1 1,885 ms $38.60 1,671 ms $42.78 ARM64
2 vCPU 2048 MB 2 1,334 ms $36.46 1,253 ms $42.77 ARM64 *
3 vCPU 4096 MB 3 685 ms $37.47 892 ms $60.80 ARM64
4 vCPU 6144 MB 4 463 ms $37.97 429 ms $44.00 ARM64
5 vCPU 8192 MB 5 338 ms $36.94 330 ms $45.10 ARM64
6 vCPU 10240 MB 6 280 ms $38.27 292 ms $49.87 ARM64
*Cheaper Arch

Cost Formulas:

  • ARM64: (Memory in GB) × (Duration in seconds) × $0.0000133334
  • x86_64: (Memory in GB) × (Duration in seconds) × $0.0000166667 (25% higher rate)

Key Insight: The 2 vCPU ARM64 configuration provides the lowest cost at $36.46 per million invocations while achieving 1.41x speedup. All ARM64 configurations remain cost-competitive ($36-$39 range) despite significant performance differences, demonstrating how increased throughput can offset higher memory costs.

Choosing the Right Configuration:

Priority Recommended Config Rationale
Lowest Cost ARM64, 2048 MB, 2 workers $36.46/1M invocations, 1.41x speedup
Balanced ARM64, 4096 MB, 3 workers $37.47/1M invocations, 2.75x speedup
Low Latency ARM64, 10240 MB, 6 workers 280ms avg, 6.73x speedup

When to Use Multi-threaded Rust on Lambda

Recommended Use Cases

  • Batch data processing: Transform, validate, or enrich large datasets
  • Cryptographic operations: Hashing, encryption, digital signatures
  • Image/video processing: Resize, transcode, analyze media files
  • Scientific computing: Simulations, data analysis, machine learning inference
  • High-volume workloads: Functions invoked >100,000 times per day benefit from optimization

When to Consider Alternatives

  • I/O-bound operations: Use async Rust instead of multi-threading for database queries or API calls
  • Simple transformations: Functions completing in <100ms rarely benefit from parallelization
  • Low-volume workloads: Development overhead may not be justified for <10,000 invocations per day
  • Rapid prototyping: Python or Node.js may be more appropriate when iteration speed is critical

Cleanup

To delete the resources created in this post:

# Delete the Lambda function
aws lambda delete-function --function-name rust-multithread-lambda

# Delete the CloudWatch log group
aws logs delete-log-group --log-group-name /aws/lambda/rust-multithread-lambda

Note: If you deployed multiple configurations for testing, you’ll need to delete each function individually by repeating the delete command with each function name, or use the SAM template for bulk cleanup:

aws cloudformation delete-stack --stack-name rust-multithread-benchmark

Conclusion

When you allocate more memory to your Lambda function, AWS provides proportionally more vCPUs—up to 6 vCPUs at 10,240 MB. However, sequential code only uses one vCPU, leaving the additional compute power idle while you pay for the full allocation. Multi-threaded Rust with Rayon enables you to harness all available vCPUs for CPU-intensive workloads, transforming unused capacity into real performance gains.

Our benchmarks demonstrate this clearly:

  • Near-linear scaling: ARM64 achieved 6.73x speedup with 6 workers—you get proportional returns on your vCPU investment
  • Fast cold starts: 19-28 ms initialization across all configurations, eliminating the cold start concerns often associated with compiled languages
  • Consistent latency: ARM64 at 6 vCPUs shows only 1ms variance between P50 and P99, critical for predictable response times
  • Cost efficiency: ARM64 is 15-20% cheaper than x86_64 with better scaling at maximum parallelization

The key takeaway: If your Lambda function performs CPU-intensive work and you’re allocating more than 1,769 MB of memory, you likely have multiple vCPUs available. Without multi-threading, those vCPUs sit idle. Rayon’s parallel iterators allow you to switch from sequential to parallel processing by changing .iter() to .par_iter() in your code.

Recommended starting point: ARM64 with 4096 MB (3 workers) offers an excellent balance of cost and performance for most workloads. Scale up to 6 vCPUs for latency-critical applications, or down to 2 vCPUs for maximum cost savings.

Additional Resources

The complete sample code, SAM template, and test scripts from this post are available at Github Repository.

Poisoning AI Training Data

Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2026/02/poisoning-ai-training-data.html

All it takes to poison AI training data is to create a website:

I spent 20 minutes writing an article on my personal website titled “The best tech journalists at eating hot dogs.” Every word is a lie. I claimed (without evidence) that competitive hot-dog-eating is a popular hobby among tech reporters and based my ranking on the 2026 South Dakota International Hot Dog Championship (which doesn’t exist). I ranked myself number one, obviously. Then I listed a few fake reporters and real journalists who gave me permission….

Less than 24 hours later, the world’s leading chatbots were blabbering about my world-class hot dog skills. When I asked about the best hot-dog-eating tech journalists, Google parroted the gibberish from my website, both in the Gemini app and AI Overviews, the AI responses at the top of Google Search. ChatGPT did the same thing, though Claude, a chatbot made by the company Anthropic, wasn’t fooled.

Sometimes, the chatbots noted this might be a joke. I updated my article to say “this is not satire.” For a while after, the AIs seemed to take it more seriously.

These things are not trustworthy, and yet they are going to be widely trusted.

‘Using PRIMM to teach programming’: A new short course for educators

Post Syndicated from Kate Irwin original https://www.raspberrypi.org/blog/using-primm-to-teach-programming-a-new-short-course-for-educators/

At the Raspberry Pi Foundation, we believe that learning to program equips young people with the knowledge and skills they need to thrive in an increasingly digital world. For many educators, teaching programming effectively can be challenging, particularly when their learners are at different stages in their programming journey. Ask learners to write code too early, and they might struggle or feel intimidated. Rely too heavily on step-by-step instructions, and you limit learners’ chances to explore ideas or develop deeper understanding.

Using PRIMM to teach programming artwork

The PRIMM framework — Predict, Run, Investigate, Modify, Make — provides educators with a structure for teaching programming. This research-informed teaching approach balances support with independence and helps learners build their understanding before they write their own code, whatever their starting point.

To help educators use this approach confidently, we have launched a new short online course, Using PRIMM to teach programming, which is available on our new Training Hub platform for free.

What is the course about?

This practical, self-paced course gives educators the knowledge they need to use the PRIMM approach to design and adapt programming activities to suit their learners.

The course takes 1–2 hours to complete, and we have designed it for educators working in formal or non-formal learning environments around the world, using any block-based or text-based programming language. All you need is some experience of creating and adapting simple programs.

The course starts with considering the five stages of PRIMM, when and why to use each stage, and how they work together to support learning. It covers how PRIMM aligns with key teaching principles such as scaffolding, managing cognitive load, and progression, and examines how the approach supports formative assessment by making learners’ thinking — and any misunderstandings — more visible.

Active, social learning

Although pedagogy forms the core of this course, we have deliberately avoided a theory-heavy approach. Instead, the course is designed to help you learn through hands-on activities. By reflecting, taking part in discussions with other computing educators, and completing practical tasks, you will explore how PRIMM works in real teaching contexts.

A computer science teacher sits with students at computers in a classroom.

After an introduction to the core ideas of PRIMM, you will design a new programming activity, or adapt an existing one, using the PRIMM structure. This will support you to think carefully about what your learners know and can do, likely misconceptions, and how each stage of PRIMM can be used effectively, including when your learners have varied learning needs and levels of programming experience.

With its emphasis on activity design, the course will support you to develop resources you can use and keep adapting in your own setting. By the end, you will have a complete PRIMM activity designed specifically for your learners, and a clear sense of how to teach programming in a structured and supportive way.

Join the course on the Training Hub

Using PRIMM to teach programming is available on our new Training Hub, where we offer all our professional development courses for free. The Training Hub offers flexible, reflective learning experiences across a range of topics, helping you build your subject knowledge and bring research-informed teaching approaches into your day-to-day practice.

Whether you are an experienced computing teacher, a volunteer educator, or a parent looking to support their child’s learning, we invite you to join us there.

The post ‘Using PRIMM to teach programming’: A new short course for educators appeared first on Raspberry Pi Foundation.

Modernizing Public Service Monitoring with Zabbix and Prodemge

Post Syndicated from Michael Kammer original https://blog.zabbix.com/modernizing-public-service-monitoring-with-zabbix-and-prodemge/32612/

Prodemge is the public IT company responsible for supporting the digital systems and services that drive the Government of Minas Gerais in Brazil. Its operations cover essential areas such as healthcare, education, public safety, finance, and infrastructure, ensuring that public policies reach citizens quickly, securely, and efficiently.

The challenge

Monitoring such a wide variety of IT environments and systems was becoming increasingly complex for Prodemge. The lack of a single source of information and real-time visibility made it difficult for teams to respond quickly to demands for innovation and improvements in digital services. This was an untenable situation, as public service monitoring supports strategic processes such as:

  • Contract tracking and supplier billing
  • Direct capacity monitoring by clients
  • Availability monitoring of telecom operator links
  • Measurement of system downtime integrated with third-party applications

The complexity increased with the adoption of hybrid cloud architecture, integration with government blockchain, relationships with critical service providers, and the role of telecommunications operators that connect the entire state infrastructure.

Given this context, it became necessary to reposition monitoring as a central element of the company’s technology governance, aligning processes, service performance, and institutional strategy.

The solution

The decision to adopt Zabbix for public service monitoring was made in 2023, when the tool was already present in part of the company’s infrastructure. In December of the same year, Target Solutions, a Zabbix Certified Delivery Partner, won the public bid and was contracted to begin the project. The implementation was structured around five main pillars:

Assessment and architecture. Integrations with cloud systems, container environments, legacy networks, and external services all needed to be mapped in order to guarantee security and compliance with public sector regulations.

Installation and configuration. More than 7,000 assets began being monitored, with around 20,000 items collected in real time. A total of 29 dashboards were developed, organized by technical areas, service layers, and criticality.

Internal training. Teams underwent training throughout 2024, focused on daily use of Zabbix, environment administration, and indicator analysis.

Integrations. Zabbix was integrated with data visualization tools, databases via ODBC, authentication systems, LDAP, corporate email, CMDB, service desk manager, the government network portal, service ticketing systems, change management modules, inconsistency detection tools, and internal APIs. Alerts began being sent via email, Telegram, and SMS, ensuring fast and traceable responses.

IT service management. One of the main advancements was IT service monitoring, especially the national identity card (CIN) service. This included:

  • Monitoring the application URL
  • Monitoring hosting servers
  • Integration with Federal Revenue Service and TSE data
  • Blockchain monitoring
  • Supervision of the supplier responsible for data processing

This model was also applied to other critical state services, including public safety and education.

The results

By monitoring more than 7,300 assets and collecting 865,000 items in real time with Zabbix, Prodemge repositioned monitoring as a pillar of IT governance, reducing incidents by 20%, strengthening contractual oversight, and consolidating a management model based on data and operational efficiency.

Currently, Prodemge’s production environment is 100% covered by Zabbix and includes the following:

  • 7,301 monitored hosts
  • 865,000 collected items
  • 159 customized templates

The developed dashboards now directly support both technical and administrative management, providing views such as SLA monitoring for the administrative city complex, government network monitoring with visualization of the consumption of 2,284 links across more than 60 agencies, as well as dashboards dedicated to IT services, control of 635 active SSL certificates, and the data lake environment operated with the Cloudera platform.

As a result, there was an approximate 20% reduction in the number of opened incidents, mainly due to the mitigation of false positives, in addition to significant time savings in incident handling and event visualization by analysts and technicians.

Another concrete example occurred in the digital identity card service, where Zabbix identified connectivity failures in external integrations. After architectural adjustments, availability increased from 34% to 99% within one month.

Conclusion

With greater system integration and consistent data usage, Zabbix’s suitability for public service monitoring has made it a central part of Prodemge’s technical and administrative routine, modernizing infrastructure and ensuring greater system availability for the population.

 

The post Modernizing Public Service Monitoring with Zabbix and Prodemge appeared first on Zabbix Blog.

Тиндър/Миндър, халал, сайтове и приложения за запознанства (продължение)

Post Syndicated from Атанас Шиников original https://www.toest.bg/tindur-mindur-halal-saytove-i-prilozhenia-za-zapoznanstva-produlzhenie/

<< Към първа част

Тиндър/Миндър, халал, сайтове и приложения за запознанства (продължение)

Флуидността, липсата на контрол, рисковете за спазването на свещения закон и твърде модерните подходи към запознанствата предизвикват предпазливи, разнородни, да не кажа негативни реакции сред традиционните религиозни учени.

Най-популярните платформи най-често са порицавани, че дори и забранявани. През 2020 г. Пакистан забрани редица приложения с такъв характер, включително Tinder и Grindr (обслужващо предимно ЛГБТК общността), тъй като те разпространявали „неморално съдържание“. На това ръководството на Grindr реагира с „дълбоко разочарование“. Показателно, използването на Tinder е ограничено в ОАЕ, а ограниченията могат да се заобиколят чрез подходяща виртуална частна мрежа (VPN). Подобна е ситуацията и в Иран.

Но „халалните“ приложения не са забранени и се радват на успех в страните с мюсюлманско мнозинство. Дори имат потенциала, ако четем The Times of India, да изместят традиционни пакистански практики, като „лелите сватовници“ („ришта лели“), които способстват за уреждане на бракове. Това не възпира религиозните авторитети да проблематизират въпроса.

В по-отворения и приемащ спектър са мнения като тези на д-р Шабир Али, който води канадското предаване „Да оставим Корана да говори“ (Let the Quran Speak) под формата на въпроси и отговори – нещо като юдейските или католическите responsa, само че в телевизионен вид. Новите технологии са позволени, доколкото способстват да се изпълнява заръката на самия Пророк, а тя гласи, че

има четири неща, заради които човек се жени. Първото е красотата. Второто е богатството. Третото е социалният престиж и произход. И четвъртото е религията.

Има сайтове, фокусирани върху това – да привличат потребители, желаещи да бъдат добри мюсюлмани и съответно да намерят подобни за връзка, с които да се развиват „в по-ислямска посока“ и в крайна сметка да стигнат до Рая (Джанна) и отвъдното. И ако тази препоръка се изпълни, пък било то и чрез новите дигитални медии, няма нищо лошо, всичко е наред.

Не мисли така обаче един от повелителите на дигиталния ислям – Мухаммад Салих ал-Мунаджжид. Още през 2006 г. в спонсорирания от него сайт за фетви се появява запитване: „Студент съм във френски университет, от алжирски произход. Нямам семейство и искам да се оженя. Позволено ли ми е да използвам интернет и сайтове за бракове, за да се оженя? Моля, отбележете, че в тези сайтове има сестри салафитки.“ А салафитският ислям, както знаем, се слави с пословична консервативност и фундаменталистки тежнения. Това придава известна легитимност на въпроса, нали?

Ал-Мунаджжид и неговият екип не харесват това. Отговорът дава и набор от изисквания, които правят една онлайн услуга (в случая уебсайт) халална. Само тогава може да ги използваш. А тези условия са формулирани така: не бива да се показват снимки на жените; на ухажора е позволено да ги гледа само след като е решил да се ожени за тях. Не бива да съдържат и описание на жените, толкова детайлно, че като го прочетеш, все едно си ги видял. Защото самият Пророк е казал в достоверния сборник на Ал-Бухари от IX век, че

никоя жена не бива да описва друга жена на нейния съпруг така, че все едно той я вижда.

Не бива да се позволява и каквато и да е кореспонденция между двата пола, защото това води до злини и просто до забавление. По-скоро администраторите на сайта следва първо да проверят кой е ухажорът, и да го свържат с настойника (уали) на жената. Съветът към студента е най-напред да потърси съдействието на семейството, приятели и реални мюсюлмански центрове, което се смята за по-безопасно от интернет. И накрая се изтъкват условията за признаване на един брак – от съществено значение е да се придобие съгласието на настойника, защото без него бракът е невалиден.

През 2006 г. шейхът е безмилостен. Оттогава много вода е изтекла, появили са се приложенията, за които вече говорихме, а и част от тях интегрират някои от неговите категорични уговорки: скриване на снимката на потребителя, получаване на съгласие на настойника, наблюдение на чатове и разговори. Дяволът (Шейтан, Иблис) обаче е в детайлите и не съм убеден, че приложения, разработени във Великобритания или САЩ, преодоляват високата летва, вдигната от намиращия се в Саудитска Арабия богослов. 

В друг агрегатор на фетви 32-годишна жена задава въпроса дали е позволено на мюсюлманите да използват приложения като Muzzmatch (очевидно, преди да стане Muzz) или Minder (явно преди да се превърне в Salams). Защото семейството ѝ е от Египет, но тя самата живее в Канада. По време на пандемията това се превръща в единствения начин да се общува с хора. Нещо повече, дали може жената да се среща с ухажори на публични места сама, или трябва задължително да бъде придружавана от някого? И също има ли ограничение колко пъти може да го прави, преди да вземе решение?

Очевидно доста сложен въпрос, съставен от множество компоненти. А отговорът се предоставя от богословка, което само по себе си е забележително – обикновено порталите от фетви се движат от мъже. И за мое неудоволствие, е донякъде постен и се фокусира предимно върху срещите с потенциални кандидати, не толкова върху приложенията или сайтовете. Последните е позволено да се използват, но с разбиране за възможните негативни аспекти. Профилът на човека отсреща може да е подлъгващ или фалшив и има риск да си изгубиш времето. Същото важи и за обмяната на снимки между двамата, като жената трябва да внимава да не разкрива нищо, освен ръцете и лицето си.

Отсъствието на родителите също е риск и неконтролираните чатове могат да подхлъзнат човек да постъпи в разрез с шариата. Що се отнася до срещи на обществени места, позволени са, ала не и без придружител – приятел или друга двойка, дори религиозно лице (имам) или по-възрастен познат. Също е препоръчително да се получи позволението на родителите. А иначе няма ограничение колко пъти може да се провеждат такива срещи, докато се вземе финално решение.

Някои от най-любопитните запитвания откриваме в портала за фетви на катарското Министерство на религиозните дарения (аукаф, вакъфи) и ислямските въпроси. Сложността на полето личи в няколко от тях.

„Жена на 41-годишна възраст съм – започва едното. – Никога не съм имала брак, стоя си вкъщи, имам първи клас от гимназията, не завърших образованието си, не съм социална, много се срамувам и не работя. Никога не съм работила в живота си, излизам от вкъщи само при належаща нужда. Регистрирах се в сайт за запознанства на име „Мауадда“.“ Най-вероятно става дума за този. Жената е регистрирана в сайта около година и половина. Там се запознава с много мъже и дава обет да се ожени. После обаче се допитва до един религиозен учен. Той ѝ дава обичайния отговор: ако сайтът е халал, може да го използва, но най-сигурно е, съветва я, да страни от такива платформи. Защото около тях витаят множество съмнения. Тогава жената изтрива профила си. След няколко дни обаче подновява регистрацията си заради възрастта си и многото контакти, които е създала там. Намерила е друга фетва, от друг богослов, която ѝ позволява да има профил в такива сайтове. Затова и се връща.

Дали е извършила грях, задето се е вслушала в мнението не на първия, а на втория религиозен авторитет? Предвид че целта на участието ѝ там е единствено да срещне мъж ерген, разведен или вдовец с осиротели деца, за да сключи брак. Позволено ли е да се използват подобни услуги, какво е мнението на богословите? Още повече че там се е запознала с 52-годишен мъж, болен от псориазис, който също не работи, в сайта е от 2009 г. (фетвата е от 2013 г.) и желае от съжаление да се омъжи за него, при все че би нарушила обещанието си пред Аллах да не използва такива услуги.

На такова разгърнато питане бих очаквал също толкова разгърнат отговор, който засяга всички тематични нишки. И той върви така.

На първо място, не е прегрешение да се използват такива платформи с цел брак, ако те са изградени според регулацията на шариата, ако на тези, които ги поддържат, може да се има доверие и ако упражняват съвестно контрол върху рисковете от нарушаване на религиозните повели. По този повод имало вече фетва.

На второ място, съществува много интересен коментар относно отношението към религиозния авторитет. Няма лошо да се избира между мненията на различни мюфтии. Само обаче при условие че не се търси нарочно одобрение за дадено рисково поведение. И затова вече са издавали фетви. А нарушаването на обещанието следва да се изкупи, тъй като се води нарушаване на клетва (каффарат йамин). Става дума за специално обезщетение, което приема формата на нахранване на бедни, обличане на хора в нужда, освобождаване на вярващ роб или пост в продължение на три дни. Но това обезщетение не се дължи, в случай че клетвата пред Аллах да не се посещава сайтът е била направена от страх, че е грях, а впоследствие се е оказало позволено.

И накрая, женитбата чрез запознанства онлайн съвсем не е лишена от рискове, особено ако една жена не е способна да прецени реално качествата и истинския характер на кандидата, както и дали е искрено вярващ и морален. Затова и се препоръчва първо да се търси съпруг по друг начин. А ако е невъзможно (очевидно питащата обрисува такава ситуация), тогава жената да го проучи много внимателно (важи и в случая за болния от псориазис мъж). Псориазисът е незаразна болест според специалистите. И ако се установи, че човекът е благочестив, вярващ и морален, няма лошо да му се предложи брак. Разбира се, накрая винаги Аллах знае най-добре.

От съвсем друга перспектива изхожда запитване за дигитална развойна дейност. Позволено ли е на програмист да пише код за сайт за срещи и запознанства (като Hi5), ако е известно, че платформата не се фокусира само върху женитби, ами и върху отворени запознанства, връзки и приятелства. „Моля, отговорете бързо!“ Отговорът е кратък и ясен, всеки може да се досети. Не е позволено. Защото подобен тип запознанства между половете отварят вратата към поквара, както е всеизвестно. И всяка подобна дейност е грях (харам), както е грях и да бъде способствана, по думите на Всевишния: „И си помагайте един другиму в праведността и богобоязливостта, а не си помагайте в греха и враждебността!“ (Коран 5:2).

Програмирането е горещ картоф и тук. „Работя като програмист на свободна практика. Получих заявка от украинец, който поиска от мен да модифицирам кода на негов сайт, засягащ начините на плащане“. Обаче този сайт е чужд сайт за запознанства между мъже и жени, няма превод на арабски език. Това грях ли е? Като се знае, че ще модифицира само техническата част за методите на заплащане. Защото „парите ми трябват, но не съм в отчаяна нужда“.

Ходим по тънък лед. Защото, отговорът гласи: сайтовете са два вида – възбранени и позволени. Възбранени са тези, които насърчават неблагочестиво поведение, като обмяна на греховни снимки, греховна любов и греховни думи. Общите сайтове и приложения са приемливи само ако се използват в съответствие с шариата. Очевидно е, че сайтът е от първия тип. Затова е греховно дори и само да се модифицира частта за онлайн плащания, тъй като това е съучастие във възбранени дейности. А иначе, питащият да не мисли за пари, защото е казано: „За онзи, който се бои от Аллах, Той сторва изход, и ще му даде препитание оттам, откъдето не е предполагал“ (Коран 65:2–3).

Тиндър/Миндър, халал, сайтове и приложения за запознанства (продължение)
Любовта на Аллах, Фес © Атанас Шиников

Строгостта на религиозния закон се стоварва и върху 21-годишен младеж, който живее в „Северна Палестина, окупирана от Израел“, в село с мюсюлманско население. Всички наоколо са „юдеи“ (йахуд), а най-близкото арабско място е на 30 минути път. На повечето работни места жените носят скандални, къси, разкриващи дрехи. Има и алкохол. За голямо съжаление, „грехът (харам) е по-леснодостъпен от позволеното (халал)“.

Преди три години въпросният младеж се запознава онлайн с момиче, което живее на час и половина път от него. Виждали са се дистанционно за броени минути, говорили са си възпитано и с уважение, дори и за миг не са се отклонили от добрия тон. От година и половина той възнамерява да ѝ предложи годеж и брак, но материалното му положение „е средна работа“, има много проблеми с правителствените регулации, разрешителни за строеж, заради което и е възпрепятстван да ѝ предложи. А и при тези условия и двете семейства не биха били съгласни. Още по-лошо, всеки месец някой предлага на девойката, а тя отказва, без да разкрива истинската причина, а именно връзката ѝ с младежа. Затова и тя, и той ден и нощ отправят молитви към Аллах да се съберат, въпреки че понякога с месеци не си говорят. Притеснението му е, че ако спрат да си говорят въобще, преди той да ѝ предложи, тя ще приеме предложение от някой друг. Затова и има нужда от отговор в тази трудна ситуация, която засяга и много мюсюлмански младежи, живеещи отвъд зелената линия, в израелската част. А тази линия е границата, която разделя територията на днешен Израел от Западния бряг и е установена през 1949 г. след Арабско-израелската война през 1948 г.

Отговорът на богословите под егидата на катарското министерство не е особено окуражителен. Обръщат внимание, че запознанствата между младежи и девойки чрез интернет и други подобни средства, дори и с цел брак, отваря вратата към „зло и развала“, затова човек трябва да бъде особено предпазлив. В случая тези отношения трябва да бъдат прекъснати. Не е позволено да се удължават под претекст страх от загуба на възможността за брак. По-скоро трябва, докато все още е неспособен да отправи реално предложение, да се заеме здраво с онова, което ще го обогати откъм вярата и благата на тукашния свят, докато не стане способен да предложи брак.

Има и компромисен вариант – да предложи на нейните настойници годеж сега, с уговорката тя да изчака, докато младежът не стане финансово способен. Ала при всички случаи не се позволява тази връзка да продължи така – по телефон и интернет, – докато няма договор по условията на шариата. Защото който остави нещо заради Аллах, Аллах ще му въздаде нещо по-добро. В крайна сметка мюсюлманите трябва да се грижат, на първо място, за интегритета на вярата си и да странят от местата на съблазън.

„Дигитализацията на любовта“, ако трябва да заема термина от едноименната книга на Ния Нейкова от 2025 г., придобива изключителна и особена динамика в глобалната умма. Връщайки се към началото на този текст, подръпването на шариатската нишка разплита използването на дигитални технологии за религиозни цели, отношенията между половете, семейните отношения, религиозния авторитет, политическия и обществения контекст, начина на вземане на решения според принадлежността към отделни религиозни и правни школи, глобализацията… А най-сигурният начин да избегнеш религиозните рискове от използването на приложенията за запознанства се оказва пословичният шеговит съвет от специалистите по киберсигурност. В случай че те е страх от онлайн заплахи, изключи достъпа си до мрежова връзка, респективно – до платформи с романтично-розов оттенък. Не че това решава всичките ти проблеми, но елиминира голяма част от информационния харам.

При условие че смятате използването на такива приложения за неизбежно обаче, мога само да заключа като един мюфтия под прикритие: Аллах знае най-добре!


В рубриката „Ориент кафе“ Атанас Шиников поднася любопитни теми, свързани не толкова с горещата политика, колкото с историята и културата на Близкия изток. А той, древен и днешен, е по-близко до нас и съвремието ни, отколкото си представяме.

Награди, класации, списъци – какво (не) казват те за видеоигрите?

Post Syndicated from original https://www.toest.bg/naghradi-klasatsii-spisutsi-kakvo-ne-kazvat-te-za-videoighrite/

Награди, класации, списъци – какво (не) казват те за видеоигрите?

Миглена Николчина: Повод за днешния разговор е безпрецедентното (поне така се твърдеше често) количество награди, които отнесе едно сравнително малко френско студио за играта „Светлосянка: Експедиция 33“ (Expedition 33: Clair Obscur). Тя отнесе не само награди, но и както ми се струва, безпрецедентно единодушие във възторга на съперниците си. Стигна се дотам, че Остин Уинтъри, който спечели „Грами“ за музиката към „Острие на морето“ (Sword of the Sea), едва ли не щеше да се откаже от наградата си, след което все пак я взе и я посвети на композиторите на „Светлосянка“. Играта заслужава отделен разговор и ние ще направим такъв със Северина Станкева. Днес ще се насочим към нещо друго: ще се взрем в една от престижните класации – 100-те най-добри игри за 2025 година според PC Gamer.

Как се правят такива класации? Какви критерии се следват? В случая, от една страна, се предлагат три рехави критерия (качество, значимост, свежест), на основата на които се гласува, после резултатът малко се поизпощва… абе… Може да си поговорим за самото това сито, за какво то би могло да бъде, но и какво в случая е уловило или изпуснало – разбира се, точно от последното се вълнуват повечето участници във форумите. За мен голямата изненада беше, че „Диско Елизиум“ (Disco Elysium), за която многократно сме говорили, е на второ място. Собственото ми мнение за такива класации е такова, че по-скоро не бих очаквала да видя една толкова „качествена, значима и свежа“ игра припозната. Как мислите? Откъде да започнем?

Еньо Стоянов: Ще почна първо с положителното: ролята на ежегодните награди, както и на списъци и класации като тази, която Миглена посочи, несъмнено допринася както за утвърждаване на набор от образцови свойства, от които да се ръководят игрите, които тепърва ще се правят, така и за кодифициране на представа за историческа традиция, за приемственост в това поле. Презумпцията е, че ако искате да се запознаете с приноса към културата на видеоигрите през времето, няма да сбъркате, ако почнете със заглавията, посочени в подобни класации или в списъците с отличените с награди през годините. При това тази ретроспекция, особено що се отнася до класациите, е променлива – несъмнено PC Gamer периодично я прави наново, тоест в процеса на постоянната преоценка наследството разкрива нови страни в пряко отношение с изменящите се ценности и приоритети в създаването на произведения в тази медия. 

За жалост, ползите всъщност често се оказват компрометирани. Например класациите – за да бъдат наистина последователни, трябва да обхващат материал, който е вътрешно съпоставим. Но тръгвайки от примера със списъка на PC Gamer, събраните в постъпателно възходяща стълбица заглавия често нямат нищо общо помежду си, освен дигиталната медия, която ги прави достъпни за играчи. Видеоигри като „Симулатор на полет от Майкрософт“ (Microsoft Flight Simulator – възпроизвеждаща в детайли управлението на самолет над също така подробна и достоверна имитация на терена на нашата планета), „Отборна крепост 2“ (Team Fortress 2 – в която неколцина играчи посредством разнородни аватари влизат в престрелка помежду си в изолирана бойна арена) и „Какво остава от Едит Финч“ (What Remains of Edith Finch – в която играчите управляват споменатата в заглавието героиня при завръщането ѝ след много време у дома, където тя се сблъсква с различни мистерии, довели до разпадането на нейното семейство) нямат нищо общо помежду си във функционален, интерактивен и тематичен план, освен това, че се играят на компютър. Дори смисълът на термина „игра“, отнесен към тях, вероятно трябва да се схваща по несъизмерим начин за всяка една. В това отношение наградите имат известно предимство, доколкото поделят игрите в самостоятелни категории, но дори те допускат единствена отличена „игра на годината“ из морето на несравнимост, насред което правят своя избор.

Има и други моменти, които подкопават валидността на критериите за селекция – класацията на PC Gamer почива всъщност на едно недоизказано предварително разделяне, което предрешава подбора. Както подсказва названието на самото списание, то е обърнато към публика, която играе предимно на персонален компютър; съответно в списъка има немалко заглавия, напълно непознати за ползвателите на игрови конзоли, като PlayStation и Xbox, и същевременно липсват заглавия, известни на играещите предимно на такива конзоли като „класики“. Въпросът не е в пропуските и дефицитите сами по себе си. Те всъщност издават, че преди да се съобразява за „качество, значимост, свежест“, се прави друга калкулация – за потребителски навици, включително на читателите на медията, която прави подбора.

Ако журналистите на PC Gamer бяха включили заглавия, недостъпни за персонален компютър, те биха отблъснали читателите, чиито погледи биха искали да задържат върху предложения списък (и оттам – върху други техни публикации).

Популярност, видимост, достъпност – това са всъщност първичните критерии за изработената класация.

Неслучайно например немалко игри в списъка на изданието присъстват не в оригиналната си версия, а в преработен вариант, публикуван през последните години. Но не този вариант на играта е основа на нейната „значимост“, ако под това разбираме влиянието, което тя евентуално е оказала върху развитието на производството на видеоигри. Наградите също не работят само въз основа на качествата на игрите, които отличават: изборът при тях твърде често е свързан с популярност и пазарен успех, към което се прибавя и още нещо – самите награди директно обслужват маркетинга на подбраните и отличени игри.

Награди, класации, списъци – какво (не) казват те за видеоигрите?
„Кредото на убиеца: Единство“ – изгаряне на книги в революционен Париж. Нито една игра от поредицата не е влязла в класацията на PC Gamer.

Николай Генов: Аз мога единствено да се съглася с Еньо, който, струва ми се, бе достатъчно изчерпателен в критиките си към подобен тип класации. Това, което ми прави силно впечатление, е

жанровият хаос и липсата на ясно заявени вътрешни критерии, които могат да ни позволят да групираме игрите по наистина смислен начин.

Впрочем тук проблемът не произлиза от и не засяга само популярните издания; той е по-скоро чисто теоретичен и се отнася до нашето изследователско поле. Но да оставим това настрана и да погледнем отново методологията на подбора – тя е изложена в самото начало на статията, която коментираме. Авторите се опитват да изчислят „качеството“ на играта (с уточнението, че тук „всеки сам си преценя“), значимостта ѝ (или влиянието на играта върху други игри) и нейната оригиналност. Миглена го преведе „свежест“ – колко в крайна сметка е различна играта спрямо останалите заглавия на пазара. Уговорките за тежестта на критериите съвсем не са маловажни. Ако фокусът паднел само върху значимостта, то списъкът щял да стане твърде статичен и би изглеждал сходно всяка година. Обратно – ако водеща била оригиналността, или иновативността, то списъкът нямало да бъде консистентен. Затова и показателите имат различна стойност – респективно съставляват 60%, 20% и 20% от общата оценка, която се дели на гласовете на играчите и преминава през „специална формула“, за да състави крайния резултат „след някои частни поправки“ (или на човешки език – след няколко натаманявания). Процесът обаче не приключва дотук – има още стъпки: всеки гласувал може да направи предложение за едно разместване, което от своя страна бива подложено на мажоритарен вот, преди да влезе в сила.

Трябва да призная, че на мен би ми било значително по-интересно да видя нещо малко по-различно – не толкова списък с популярни заглавия, колкото краен, силно пречупен подбор, даже няколко такива –добре аргументирани конфликтни решения, които да влязат в противоречие и да създадат продуктивно напрежение. Дори да запазим горните критерии, нека видим двата „крайни“ варианта – споменатия „ригиден“ и загатнатия „неконсистентен“, динамичен списък – положени един до друг. И нека повторим опита отново и отново. След няколко години ще имаме твърдения, които ще подлежат на преразглеждане, и ще се очертаят тенденции, които бихме могли да се опитаме да обясним. Иначе най-близкото до това, с което разполагаме сега, са различните класации на различните медии.

Впрочем по линия на същата тази потенциална ригидност „Диско Елизиум“ спечели „Игра на годината“ на PC Gamer за 2019-та. Няма да скрия обаче, че мен значително повече ме радва присъствието тук на „Колоните на вечността“ (Pillars of Eternity 2: Deadfire).

Миглена Николчина: Може би все пак трябва да приемем чия е класацията – тя е на PC Gamer („Компютърен играч“), не е на PlayStation Gamer! Тоест

има един доста твърд критерий и това е машината, на която се играе. Тази машина позволява по-голяма активност на играчите, поне в някои от случаите.

Проблемът за жанровете, от друга страна, би могъл да влезе в конфликт с флуидността на полето, в което едни и същи играчи играят и ролеви игри, и стратегии, или ако погледнем под друг ъгъл, и научнофантастични, и приказни, и исторически и т.н. сюжети. Най-сетне, freshness (свежест) е думата, която са употребили в списанието, не преекспонираната и вече съвсем загубила смисъл от бюрократичните си употреби дума innovativness (иновативност). Думата свежест ме навежда към възможна защита на тази като че ли безпринципна класация: тя извежда на преден план преживяването на играча, интуицията му, превръщането на играенето във вътрешен опит, в осмисляне. „Рицари на Старата република 2“ (Knights of the Old Republic 2) например беше брутално посрещната при излизането ѝ, но е овъзмездена от по-късната ѝ преоценка, която я държи в класацията вече 22 години! Радва ме, че „свежи“ игри, като „Субнавтика“ (Subnautica) и „Хадес“ (Hades), са намерили място – „Светлосянка“ е чак на 82-ро място!

Награди, класации, списъци – какво (не) казват те за видеоигрите?
„Субнавтика“ – поетичен разказ за онези, които не се боят от дълбините

От друга страна, има липси, които са, меко казано, странни – чак пък нито една игра от поредицата „Кредото на убиеца“ (Assassin’s Creed)! Най-сетне, има и откровени глупотевини, поне по мое мнение, което ме кара да се съмнявам в мотивите на натъкмистиката. Какво ще кажете за следното предложение: да оставим методологиите за друг вид дискусии, а тук да предложим собствени 100 игри по следния начин: всеки от нас петимата предлага своите най-важни 20. Игрите, които съвпадат, отиват съответно нагоре в списъка и освобождават места, които запълваме с нови предложения, докато заковем стотната?

Чавдар Парушев: Струва ми се, че класации като тази са натоварени да работят като особен механизъм на приобщаване. Конструират се така, че в идеалния случай всеки играч (на компютър тук конкретно) да може да намери поне една, а още по-добре няколко значими за него заглавия на челни позиции. В този смисъл няма толкова голямо значение дали „Диско Елизиум“ се класира втора, пета или дори десета. Важното е, че присъства и с присъствието си отваря разговор. Грабва вниманието на определена публика, определена група от играчи и ги провокира да заговорят. Пък било то и да изразят гласно кои заглавия са необяснимо изпуснати според заявените критерии или как класацията трябва да бъде преподредена.

В този смисъл класации като тази са по-успешни, когато вървят срещу, а не следват традиционните очаквания за обективност, ясни критерии, строгост на подбора, съизмеримост между подбираните заглавия. Точно обратното – колкото по разнопосочни и разнородни заглавия включат, толкова повече групи играчи биха ангажирали и провокирали за разговор.

Доколкото има критерии на подбор, те действително на първо място са популярност, видимост и достъпност и чак след това – качество, значимост, свежест

(и само там, където вторият набор от критерии не влиза в конфликт с първия набор). Игрите се включват (или не) в съответната класация в качеството си на репрезентация на група играчи, а не сами по себе си. В този смисъл, ако класацията изобщо класира нещо, то е кои критерии за игри по-лесно или по-трудно формират видими групи от играчи. Положителното встрани от маркетинговото взаимообслужване (класацията печели читатели заради популярността на игрите и обратното) е, че тези класации отварят по-широко поле, в което се засрещат и сблъскват гласове на групи от хора, които иначе не разговарят и не биха имали причина да разговарят помежду си, включително и за естетическите аспекти на игрите, които играят.

Миглена Николчина: Тоест да направим и ние своята – не класация в смисъл на подреждане, а подборка? Току-виж и български игри се появили в нея… А междувременно със Северина може да споделим мисли по тази несъмнено забележителна игра – „Светлосянка“…

(Следва продължение.)


В рубриката „Игромислие“ публикуваме разговори, в които се срещат, съпоставят и противопоставят различни гледни точки към многоизмерния, многожанров феномен на видеоигрите – не толкова като електронен спорт, колкото като нов синтез на изкуствата и като ново поле на общуване и социалност.

Restarting LibreOffice Online

Post Syndicated from corbet original https://lwn.net/Articles/1060087/

LibreOffice online is a web-based version of the LibreOffice suite that can
be hosted on anybody’s infrastructure. This project was put into stasis back in 2022, a move marked by
some tension with Collabora, a major LibreOffice developer that has its own online offering. Now,
the Document Foundation has announced
a new effort to breathe life into this project.

We plan to reopen the repository for LibreOffice Online at The
Document Foundation for contributions, but provide warnings about
the state of the repository until TDF’s team agrees that it’s safe
and usable – while at the same time encourage the community to join
in with code, technologies and other contributions that can be used
to move forward.

Meanwhile, this
post from Michael Meeks
suggests that the tension around online
versions of LibreOffice has not abated.

How we rebuilt Next.js with AI in one week

Post Syndicated from Steve Faulkner original https://blog.cloudflare.com/vinext/

*This post was updated at 12:35 pm PT to fix a typo in the build time benchmarks.

Last week, one engineer and an AI model rebuilt the most popular front-end framework from scratch. The result, vinext (pronounced “vee-next”), is a drop-in replacement for Next.js, built on Vite, that deploys to Cloudflare Workers with a single command. In early benchmarks, it builds production apps up to 4x faster and produces client bundles up to 57% smaller. And we already have customers running it in production. 

The whole thing cost about $1,100 in tokens.

The Next.js deployment problem

Next.js is the most popular React framework. Millions of developers use it. It powers a huge chunk of the production web, and for good reason. The developer experience is top-notch.

But Next.js has a deployment problem when used in the broader serverless ecosystem. The tooling is entirely bespoke: Next.js has invested heavily in Turbopack but if you want to deploy it to Cloudflare, Netlify, or AWS Lambda, you have to take that build output and reshape it into something the target platform can actually run.

If you’re thinking: “Isn’t that what OpenNext does?”, you are correct. 

That is indeed the problem OpenNext was built to solve. And a lot of engineering effort has gone into OpenNext from multiple providers, including us at Cloudflare. It works, but quickly runs into limitations and becomes a game of whack-a-mole. 

Building on top of Next.js output as a foundation has proven to be a difficult and fragile approach. Because OpenNext has to reverse-engineer Next.js’s build output, this results in unpredictable changes between versions that take a lot of work to correct. 

Next.js has been working on a first-class adapters API, and we’ve been collaborating with them on it. It’s still an early effort but even with adapters, you’re still building on the bespoke Turbopack toolchain. And adapters only cover build and deploy. During development, next dev runs exclusively in Node.js with no way to plug in a different runtime. If your application uses platform-specific APIs like Durable Objects, KV, or AI bindings, you can’t test that code in dev without workarounds.

Introducing vinext


What if instead of adapting Next.js output, we reimplemented the Next.js API surface on Vite directly? Vite is the build tool used by most of the front-end ecosystem outside of Next.js, powering frameworks like Astro, SvelteKit, Nuxt, and Remix. A clean reimplementation, not merely a wrapper or adapter. We honestly didn’t think it would work. But it’s 2026, and the cost of building software has completely changed.

We got a lot further than we expected.

npm install vinext

Replace next with vinext in your scripts and everything else stays the same. Your existing app/, pages/, and next.config.js work as-is.

vinext dev          # Development server with HMR
vinext build        # Production build
vinext deploy       # Build and deploy to Cloudflare Workers

This is not a wrapper around Next.js and Turbopack output. It’s an alternative implementation of the API surface: routing, server rendering, React Server Components, server actions, caching, middleware. All of it built on top of Vite as a plugin. Most importantly Vite output runs on any platform thanks to the Vite Environment API.

The numbers

Early benchmarks are promising. We compared vinext against Next.js 16 using a shared 33-route App Router application.

Both frameworks are doing the same work: compiling, bundling, and preparing server-rendered routes. We disabled TypeScript type checking and ESLint in Next.js’s build (Vite doesn’t run these during builds), and used force-dynamic so Next.js doesn’t spend extra time pre-rendering static routes, which would unfairly slow down its numbers. The goal was to measure only bundler and compilation speed, nothing else. Benchmarks run on GitHub CI on every merge to main.

Production build time:

Framework Mean vs Next.js
Next.js 16.1.6 (Turbopack) 7.38s baseline
vinext (Vite 7 / Rollup) 4.64s 1.6x faster
vinext (Vite 8 / Rolldown) 1.67s 4.4x faster

Client bundle size (gzipped):

Framework Gzipped vs Next.js
Next.js 16.1.6 168.9 KB baseline
vinext (Rollup) 74.0 KB 56% smaller
vinext (Rolldown) 72.9 KB 57% smaller

These benchmarks measure compilation and bundling speed, not production serving performance. The test fixture is a single 33-route app, not a representative sample of all production applications. We expect these numbers to evolve as three projects continue to develop. The full methodology and historical results are public. Take them as directional, not definitive.

The direction is encouraging, though. Vite’s architecture, and especially Rolldown (the Rust-based bundler coming in Vite 8), has structural advantages for build performance that show up clearly here.

Deploying to Cloudflare Workers

vinext is built with Cloudflare Workers as the first deployment target. A single command takes you from source code to a running Worker:

vinext deploy

This handles everything: builds the application, auto-generates the Worker configuration, and deploys. Both the App Router and Pages Router work on Workers, with full client-side hydration, interactive components, client-side navigation, React state.

For production caching, vinext includes a Cloudflare KV cache handler that gives you ISR (Incremental Static Regeneration) out of the box:

import { KVCacheHandler } from "vinext/cloudflare";
import { setCacheHandler } from "next/cache";

setCacheHandler(new KVCacheHandler(env.MY_KV_NAMESPACE));

KV is a good default for most applications, but the caching layer is designed to be pluggable. That setCacheHandler call means you can swap in whatever backend makes sense. R2 might be a better fit for apps with large cached payloads or different access patterns. We’re also working on improvements to our Cache API that should provide a strong caching layer with less configuration. The goal is flexibility: pick the caching strategy that fits your app.

Live examples running right now:

We also have a live example of Cloudflare Agents running in a Next.js app, without the need for workarounds like getPlatformProxy, since the entire app now runs in workerd, during both dev and deploy phases. This means being able to use Durable Objects, AI bindings, and every other Cloudflare-specific service without compromise. Have a look here.

Frameworks are a team sport

The current deployment target is Cloudflare Workers, but that’s a small part of the picture. Something like 95% of vinext is pure Vite. The routing, the module shims, the SSR pipeline, the RSC integration: none of it is Cloudflare-specific.

Cloudflare is looking to work with other hosting providers about adopting this toolchain for their customers (the lift is minimal — we got a proof-of-concept working on Vercel in less than 30 minutes!). This is an open-source project, and for its long term success, we believe it’s important we work with partners across the ecosystem to ensure ongoing investment. PRs from other platforms are welcome. If you’re interested in adding a deployment target, open an issue or reach out.

Status: Experimental

We want to be clear: vinext is experimental. It’s not even one week old, and it has not yet been battle-tested with any meaningful traffic at scale. If you’re evaluating it for a production application, proceed with appropriate caution.

That said, the test suite is extensive: over 1,700 Vitest tests and 380 Playwright E2E tests, including tests ported directly from the Next.js test suite and OpenNext’s Cloudflare conformance suite. We’ve verified it against the Next.js App Router Playground. Coverage sits at 94% of the Next.js 16 API surface.

Early results from real-world customers are encouraging. We’ve been working with National Design Studio, a team that’s aiming to modernize every government interface, on one of their beta sites, CIO.gov. They’re already running vinext in production, with meaningful improvements in build times and bundle sizes.

The README is honest about what’s not supported and won’t be, and about known limitations. We want to be upfront rather than overpromise.

What about pre-rendering?

vinext already supports Incremental Static Regeneration (ISR) out of the box. After the first request to any page, it’s cached and revalidated in the background, just like Next.js. That part works today.

vinext does not yet support static pre-rendering at build time. In Next.js, pages without dynamic data get rendered during next build and served as static HTML. If you have dynamic routes, you use generateStaticParams() to enumerate which pages to build ahead of time. vinext doesn’t do that… yet.

This was an intentional design decision for launch. It’s on the roadmap, but if your site is 100% prebuilt HTML with static content, you probably won’t see much benefit from vinext today. That said, if one engineer can spend $1,100 in tokens and rebuild Next.js, you can probably spend $10 and migrate to a Vite-based framework designed specifically for static content, like Astro (which also deploys to Cloudflare Workers).

For sites that aren’t purely static, though, we think we can do something better than pre-rendering everything at build time.

Introducing Traffic-aware Pre-Rendering

Next.js pre-renders every page listed in generateStaticParams() during the build. A site with 10,000 product pages means 10,000 renders at build time, even though 99% of those pages may never receive a request. Builds scale linearly with page count. This is why large Next.js sites end up with 30-minute builds.

So we built Traffic-aware Pre-Rendering (TPR). It’s experimental today, and we plan to make it the default once we have more real-world testing behind it.

The idea is simple. Cloudflare is already the reverse proxy for your site. We have your traffic data. We know which pages actually get visited. So instead of pre-rendering everything or pre-rendering nothing, vinext queries Cloudflare’s zone analytics at deploy time and pre-renders only the pages that matter.

vinext deploy --experimental-tpr

  Building...
  Build complete (4.2s)

  TPR (experimental): Analyzing traffic for my-store.com (last 24h)
  TPR: 12,847 unique paths — 184 pages cover 90% of traffic
  TPR: Pre-rendering 184 pages...
  TPR: Pre-rendered 184 pages in 8.3s → KV cache

  Deploying to Cloudflare Workers...

For a site with 100,000 product pages, the power law means 90% of traffic usually goes to 50 to 200 pages. Those get pre-rendered in seconds. Everything else falls back to on-demand SSR and gets cached via ISR after the first request. Every new deploy refreshes the set based on current traffic patterns. Pages that go viral get picked up automatically. All of this works without generateStaticParams() and without coupling your build to your production database.

Taking on the Next.js challenge, but this time with AI

A project like this would normally take a team of engineers months, if not years. Several teams at various companies have attempted it, and the scope is just enormous. We tried once at Cloudflare! Two routers, 33+ module shims, server rendering pipelines, RSC streaming, file-system routing, middleware, caching, static export. There’s a reason nobody has pulled it off.

This time we did it in under a week. One engineer (technically engineering manager) directing AI.

The first commit landed on February 13. By the end of that same evening, both the Pages Router and App Router had basic SSR working, along with middleware, server actions, and streaming. By the next afternoon, App Router Playground was rendering 10 of 11 routes. By day three, vinext deploy was shipping apps to Cloudflare Workers with full client hydration. The rest of the week was hardening: fixing edge cases, expanding the test suite, bringing API coverage to 94%.

What changed from those earlier attempts? AI got better. Way better.

Why this problem is made for AI

Not every project would go this way. This one did because a few things happened to line up at the right time.

Next.js is well-specified. It has extensive documentation, a massive user base, and years of Stack Overflow answers and tutorials. The API surface is all over the training data. When you ask Claude to implement getServerSideProps or explain how useRouter works, it doesn’t hallucinate. It knows how Next works.

Next.js has an elaborate test suite. The Next.js repo contains thousands of E2E tests covering every feature and edge case. We ported tests directly from their suite (you can see the attribution in the code). This gave us a specification we could verify against mechanically.

Vite is an excellent foundation. Vite handles the hard parts of front-end tooling: fast HMR, native ESM, a clean plugin API, production bundling. We didn’t have to build a bundler. We just had to teach it to speak Next.js. @vitejs/plugin-rsc is still early, but it gave us React Server Components support without having to build an RSC implementation from scratch.

The models caught up. We don’t think this would have been possible even a few months ago. Earlier models couldn’t sustain coherence across a codebase this size. New models can hold the full architecture in context, reason about how modules interact, and produce correct code often enough to keep momentum going. At times, I saw it go into Next, Vite, and React internals to figure out a bug. The state-of-the-art models are impressive, and they seem to keep getting better.

All of those things had to be true at the same time. Well-documented target API, comprehensive test suite, solid build tool underneath, and a model that could actually handle the complexity. Take any one of them away and this doesn’t work nearly as well.

How we actually built it

Almost every line of code in vinext was written by AI. But here’s the thing that matters more: every line passes the same quality gates you’d expect from human-written code. The project has 1,700+ Vitest tests, 380 Playwright E2E tests, full TypeScript type checking via tsgo, and linting via oxlint. Continuous integration runs all of it on every pull request. Establishing a set of good guardrails is critical to making AI productive in a codebase.

The process started with a plan. I spent a couple of hours going back and forth with Claude in OpenCode to define the architecture: what to build, in what order, which abstractions to use. That plan became the north star. From there, the workflow was straightforward:

  1. Define a task (“implement the next/navigation shim with usePathname, useSearchParams, useRouter“).

  2. Let the AI write the implementation and tests.

  3. Run the test suite.

  4. If tests pass, merge. If not, give the AI the error output and let it iterate.

  5. Repeat.

We wired up AI agents for code review too. When a PR was opened, an agent reviewed it. When review comments came back, another agent addressed them. The feedback loop was mostly automated.

It didn’t work perfectly every time. There were PRs that were just wrong. The AI would confidently implement something that seemed right but didn’t match actual Next.js behavior. I had to course-correct regularly. Architecture decisions, prioritization, knowing when the AI was headed down a dead end: that was all me. When you give AI good direction, good context, and good guardrails, it can be very productive. But the human still has to steer.

For browser-level testing, I used agent-browser to verify actual rendered output, client-side navigation, and hydration behavior. Unit tests miss a lot of subtle browser issues. This caught them.

Over the course of the project, we ran over 800 sessions in OpenCode. Total cost: roughly $1,100 in Claude API tokens.

What this means for software

Why do we have so many layers in the stack? This project forced me to think deeply about this question. And to consider how AI impacts the answer.

Most abstractions in software exist because humans need help. We couldn’t hold the whole system in our heads, so we built layers to manage the complexity for us. Each layer made the next person’s job easier. That’s how you end up with frameworks on top of frameworks, wrapper libraries, thousands of lines of glue code.

AI doesn’t have the same limitation. It can hold the whole system in context and just write the code. It doesn’t need an intermediate framework to stay organized. It just needs a spec and a foundation to build on.

It’s not clear yet which abstractions are truly foundational and which ones were just crutches for human cognition. That line is going to shift a lot over the next few years. But vinext is a data point. We took an API contract, a build tool, and an AI model, and the AI wrote everything in between. No intermediate framework needed. We think this pattern will repeat across a lot of software. The layers we’ve built up over the years aren’t all going to make it.

Acknowledgments

Thanks to the Vite team. Vite is the foundation this whole thing stands on. @vitejs/plugin-rsc is still early days, but it gave me RSC support without having to build that from scratch, which would have been a dealbreaker. The Vite maintainers were responsive and helpful as I pushed the plugin into territory it hadn’t been tested in before.

We also want to acknowledge the Next.js team. They’ve spent years building a framework that raised the bar for what React development could look like. The fact that their API surface is so well-documented and their test suite so comprehensive is a big part of what made this project possible. vinext wouldn’t exist without the standard they set.

Try it

vinext includes an Agent Skill that handles migration for you. It works with Claude Code, OpenCode, Cursor, Codex, and dozens of other AI coding tools. Install it, open your Next.js project, and tell the AI to migrate:

npx skills add cloudflare/vinext

Then open your Next.js project in any supported tool and say:

migrate this project to vinext

The skill handles compatibility checking, dependency installation, config generation, and dev server startup. It knows what vinext supports and will flag anything that needs manual attention.

Or if you prefer doing it by hand:

npx vinext init    # Migrate an existing Next.js project
npx vinext dev     # Start the dev server
npx vinext deploy  # Ship to Cloudflare Workers

The source is at github.com/cloudflare/vinext. Issues, PRs, and feedback are welcome.

Transform live video for mobile audiences with AWS Elemental Inference

Post Syndicated from Micah Walter original https://aws.amazon.com/blogs/aws/transform-live-video-for-mobile-audiences-with-aws-elemental-inference/

Today, we’re announcing AWS Elemental Inference, a fully managed AI service that automatically transforms and maximizes live and on-demand video broadcasts to engage audiences at scale. At launch, you’ll be able to use AWS Elemental Inference to adapt video content into vertical formats optimized for mobile and social platforms in real time.

With AWS Elemental Inference, broadcasters and streamers can reach audiences on social and mobile platforms such as TikTok, Instagram Reels, and YouTube Shorts without manual postproduction work or AI expertise.

Today’s viewers consume content differently than they did even a few years ago. However, most broadcasts are produced in landscape format for traditional viewing. Converting these broadcasts into vertical formats for mobile platforms typically requires time-consuming manual editing that causes broadcasters and streamers to miss viral moments and lose audiences to mobile-first destinations.

Let’s try it out
AWS Elemental Inference offers flexible deployment options to fit your existing workflow. You can choose to create a feed through the standalone console or configure AWS Elemental Inference through the AWS Elemental MediaLive console.

AWS Elemental Inference console

To get started with AWS Elemental Inference, navigate to the AWS Management Console and choose AWS Elemental Inference. From the dashboard, choose Create feed to establish your top-level resource for AI-powered video processing. A feed contains your feature configurations and begins in CREATING state before transitioning to AVAILABLE when ready.

AWS Elemental Inference console

After creating your feed, you can configure outputs for either vertical video cropping or clip generation. For cropping, you can start with an empty feed. The service automatically manages cropping parameters based on your video specifications. For clip generation, choose Add output, provide a name (such as “highlight-clips”), select Clipping as the output type, and set the status to ENABLED.

This standalone interface provides a streamlined experience for configuring and managing your AI-powered video transformations, making it straightforward to get started with vertical video creation and clip generation.

AWS MediaLive inference

Alternatively, you can enable AWS Elemental Inference directly within your AWS Elemental MediaLive channel configuration. You can use this integrated approach to add AI capabilities to your existing live video workflows without modifying your architecture. Enable the features you need as part of your channel setup, and AWS Elemental Inference will work in parallel with your video encoding.

AWS MediaLive inference console

After it’s enabled, you can configure Smart Crop with outputs for different resolution specifications within an Output group.

AWS MediaLive inference console

AWS Elemental MediaLive now includes a dedicated AWS Elemental Inference tab on the channel details page, providing a centralized view of your AI-powered video transformation configuration. The tab displays the service Amazon Resource Name (ARN), data endpoints, and feed output details, including which features, such as Smart Crop, are enabled and their current operational status.

How AWS Elemental Inference works
The service uses an agentic AI application that analyses video in real time and automatically applies the right optimizations at the right moments. Detection of vertical video cropping and clip generation happens independently, executing multistep transformations that require no human intervention to extract value.

AWS Elemental Inference analyzes video and automatically applies AI capabilities with no human-in-the-loop prompting required. While you focus on quality video production, the service autonomously optimizes content to create personalized content experiences for your audience.

AWS Elemental Inference applies AI capabilities in parallel with live video, achieving 6–10 second latency compared to minutes for traditional postprocessing approaches. This “process once, optimize everywhere” method runs multiple AI features simultaneously on the same video stream, eliminating the need to reprocess content for each capability.

The service integrates seamlessly with AWS Elemental MediaLive, so you can enable AI features without modifying your existing video architecture. AWS Elemental Inference uses fully managed foundation models (FMs) that are automatically updated and optimized, so you don’t need dedicated AI teams or specialized expertise.

Key features at launch
Enjoy the following key features when AWS Elemental Inference launches:

  • Vertical video creation – AI-powered cropping intelligently transforms landscape broadcasts into vertical formats (9:16 aspect ratio) optimized for social and mobile platforms. The service tracks subjects and keeps key action visible, maintaining broadcast quality while automatically reformatting content for mobile viewing.
  • Clip generation with advanced metadata analysis – Automatically detects and extracts clips from live content, highlighting moments for real-time distribution. For live broadcasts, this means identifying game-winning plays in soccer and basketball—reducing manual editing from hours to minutes.

Keep an eye on this space as more features and capabilities will be introduced throughout this year, including tighter integration with core AWS Elemental services and features to help customers monetize their video content.

Now available
AWS Elemental Inference is available today in 4 AWS Regions: US East (N. Virginia), US West (Oregon), Europe (Ireland), and Asia Pacific (Mumbai). You can enable AWS Elemental Inference through the AWS Elemental MediaLive console or integrate it into your workflows using the AWS Elemental MediaLive APIs.

With consumption-based pricing, you pay only for the features you use and the video you process, with no upfront costs or commitments. This means you can scale during peak events and optimize costs during quieter periods.

To learn more about AWS Elemental Inference, visit the AWS Elemental Inference product page. For technical implementation details, see the AWS Elemental Inference documentation.

 

Amazon SageMaker AI now hosts NVIDIA Evo-2 NIM microservices

Post Syndicated from Malvika Viswanathan original https://aws.amazon.com/blogs/compute/amazon-sagemaker-ai-now-hosting-nvidia-evo-2-nim-microservices/

This post is co-written with Neel Patel, Abdullahi Olaoye, Kristopher Kersten, Aniket Deshpande from NVIDIA.

Today, we’re excited to announce that the NVIDIA Evo-2 NVIDIA NIM microservice are now listed in Amazon SageMaker JumpStart. You can use this launch to deploy accelerated and specialized NIM microservices to build, experiment, and responsibly scale your drug discovery workflows on Amazon Web Services (AWS).

In this post, we demonstrate how to get started with these models using Amazon SageMaker Studio.

NVIDIA NIM microservices on AWS

NVIDIA NIM integrates closely with AWS managed services, such as Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Kubernetes Service (Amazon EKS), and Amazon SageMaker AI, to support deployment of generative AI models at scale. As part of NVIDIA AI Enterprise, which is available in the AWS Marketplace, NVIDIA NIM is a set of microservices designed to accelerate the deployment of generative AI. These prebuilt containers support a broad spectrum of generative AI models, from open source community models, to NVIDIA Nemotron and custom models. NIM microservices are deployed with just a few lines of code, or with a few actions in the SageMaker Studio console. Engineered to facilitate seamless generative AI inferencing at scale, NIM ensures that generative AI applications can be deployed on various AWS services.

NVIDIA BioNeMo Evo 2 overview

NVIDIA BioNeMo is a platform of NIM microservices, developer tools, and AI models that accelerate building, adapting, and deploying biomolecular AI models for drug discovery. It packages curated training recipes, data loaders, and domain-optimized pretrained models for DNA, RNA, and proteins, alongside NVIDIA CUDA-X libraries such as NVIDIA cuEquivariance. These components power tasks such as 3D structure prediction, de novo design, virtual screening, docking, and property prediction with GPU-accelerated performance.

NVIDIA NIM microservices provide optimized, API-first inference that integrates directly into enterprise pipelines across on-premises and the cloud, providing scalable and secure deployment with faster time-to-market and lower Total Cost of Ownership (TCO). The Evo 2 NIM delivers a 40-billion parameter foundation model (FM) trained on a vast dataset of genomes that can be used to predict protein function, identify mutations, and accelerate bioengineering research. Furthermore, the Evo 2 NIM can be chained with other NIM microservices such as ESMFold to create end-to-end, containerized workflows that cut time-to-insight while streamlining deployment through consistent APIs.

SageMaker Studio overview

SageMaker Studio is a web-based integrated development environment (IDE) for machine learning (ML) that provides a unified visual interface for all of the tools that you need to complete each step of the ML development lifecycle. SageMaker Studio provides complete access, control, and visibility into each step of the ML workflow, from data preparation to model building, training, and deployment.

The key features of SageMaker Studio include:

  • Unified interface: Access all SageMaker capabilities through a single, web-based visual interface
  • Jupyter notebooks: Fully managed Jupyter notebooks with pre-configured kernels for popular ML frameworks
  • Model management: Browse, deploy, and manage models from AWS Marketplace and other sources through an intuitive interface
  • Collaboration: Share notebooks, experiments, and models with your team members
  • Built-in security: Integrated with AWS Identity and Access Management (IAM) for secure access control
  • Cost management: Monitor and control costs with built-in usage tracking and resource management tools

Amazon SageMaker JumpStart overview

SageMaker JumpStart is a fully managed service that offers state-of-the-art foundation models for various use cases such as content writing, code generation, question answering, copywriting, summarization, classification, and information retrieval. It provides a collection of pre-trained models that you can deploy quickly, accelerating the development and deployment of ML applications. One of the key components of SageMaker JumpStart is model hubs, which offer a vast catalog of pre-trained models, such as Mistral, for a variety of tasks. You can now discover and deploy Evo 2 NIM in Amazon SageMaker Studio or programmatically through the SageMaker Python SDK, so you can derive model performance and MLOps controls with Amazon SageMaker AI features such as Amazon SageMaker Pipelines, Amazon SageMaker Debugger, or container logs. The model is deployed in a secure AWS environment and in your VPC, helping to support data security for enterprise security needs.

Prerequisites

Before getting started with deployment, make sure that your IAM service role for SageMaker AI has the SageMakerFullAccess permission policy attached. To deploy the NVIDIA NIM microservices successfully, confirm one of the following:

Make sure that your IAM role has the following permissions, and that you have the authority to make AWS Marketplace subscriptions in the AWS account used:

  • aws-marketplace:ViewSubscriptions
  • aws-marketplace:Unsubscribe
  • aws-marketplace:Subscribe

If your account is already subscribed to the model, then you can skip to the following Deploy section. Otherwise, start by subscribing to the model package and move to the Deploy section after.

Subscribe to the model package

To subscribe to the model package, complete the following steps:

  1. Open the SageMaker Jumpstart portal from the SageMaker AI page.
  2. Search for Evo 2 NIM.
  3. Choose View model, and on the Model details page choose Subscribe. This will take you to the AWS Marketplace listing for the Evo 2 NIM.
  4. On the AWS Marketplace listing page, choose View purchase options, review the purchase terms and choose the Subscribe button if you and your organization agree with EULA, pricing, and support terms.
  5. Choose Continue to with the configuration and choose an AWS Region where you have the service quota for the desired instance type.

A product Amazon Resource Name (ARN) is displayed. This is the model package ARN that you need to specify while creating a deployable model using the SageMaker SDK.

Option 1: Deploy the Evo 2 NIM using SageMaker Studio

The following section outlines how to deploy the EVO 2 NIM using SageMaker Studio.

Getting started with SageMaker Studio

Begin by accessing the AWS Management Console and navigating to the SageMaker AI service. When you’re in the SageMaker AI console, locate Studio in the left navigation panel and choose Open Studio next to your user profile. If you haven’t set up a SageMaker Studio domain yet, then you must create a new domain and user profile first. This launches the web-based SageMaker Studio interface where you can manage all aspects of your ML workflow.

Navigating to model packages

Within SageMaker Studio, look for Models in the left sidebar and choose JumpStart base models tab within the Models interface. This section contains all available model packages in SageMaker JumpStart, including those from the AWS Marketplace

Locating the Evo-2 NIM model

Use the search functionality to find the NVIDIA Evo-2 NIM model by searching for terms such as “Evo-2” or “NVIDIA”. When you locate the model package in the filtered results, choose it to view the Model overview page. This page provides an overview of the model and can have a Notebooks tab that will show a sample notebook that contains an example showing how to use the NIM. You can choose Open in JupyterLab to open the notebook in JupyterLab and use it as a starting point for using the NIM.

Configuring the model deployment

On the model package overview page, choose the Deploy button on the top right to begin the deployment process. You must configure several important settings: provide a unique endpoint name (such as “Evo-2-nim-endpoint”), choose an appropriate instance type (ml.g6e.12xlarge is recommended for optimal performance), set the initial instance count (typically 1 for initial testing), and specify an endpoint configuration name. Review all of these settings carefully before proceeding.

Initiating and monitoring the deployment

After verifying your configuration settings, choose Deploy to start the deployment process for creating a Real-time inferance endpoint. Navigate to the Deployments section and then the Endpoints section in the left sidebar to monitor the deployment progress. The endpoint status initially shows Creating and typically takes 5–10 minutes to complete. You can track the progress and should see the status change to InService once the deployment is successful.

Testing and validation

When your endpoint is deployed and shows the In Service status, you can optionally test it directly through the SageMaker Studio interface. Choose your deployed endpoint from the endpoints list to access the Endpoint summary page. Scroll down and select the Playground tab. If available, you will see two options: Test the sample request and Use Python SDK example code. You can use either option to validate the deployment by using a sample protein sequence. This validates the endpoint is working correctly before integrating it into your applications.

Option 2: Deploy Evo 2 using the SageMaker SDK

In this section we walk through deploying the Evo-2 NIM through the SageMaker SDK. Make sure that you have the account-level service limit for using ml.g6e.12xlarge for endpoint usage as one or more instances. Furthermore, NVIDIA provides a list of supported instance types that support deployment. Refer to the AWS Marketplace listing for the model to see the supported instance types. To request a service quota increase, go to the AWS service quotas.

import sagemaker
import boto3
from sagemaker import ModelPackage, get_execution_role
import json
# Initialize SageMaker session and role
role = get_execution_role()
sagemaker_session = sagemaker.Session()
# Model Package ARN from your AWS Marketplace subscription
# Replace this with your actual Model Package ARN after subscription
model_package_arn = "arn:aws:sagemaker:<region>:<account-id>:model-package/Evo-2-nim-model"
# Create model from AWS Marketplace Model Package
model = ModelPackage(
    role=role, 
    model_package_arn=model_package_arn,
    sagemaker_session=sagemaker_session
)
# Deploy the model to an endpoint
predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.g6e.12xlarge",  # Using recommended NVIDIA GPU instance
    endpoint_name="Evo-2-endpoint",
    wait=True
)

Run Inference with Evo 2 SageMaker endpoint

When you have the model, you can use a sample text to do an inference request. NIM on SageMaker supports the OpenAI API inference protocol inference request format. For an explanation of the supported parameters, go to the Evo-2 API documentation.

Real-time inference example

sm_runtime = boto3.client("sagemaker-runtime", region_name=region)

generate_payload = {

 "sequence": "ACGTACGTACGT",

 "num_tokens": 100,

 "temperature": 0.7,

 "top_k": 3,

}

response = sm_runtime.invoke_endpoint(

EndpointName='Evo2-40b-2-1-0',

ContentType="application/json",

Body=json.dumps(generate_payload),

)

result = json.loads(response["Body"].read())

print("Generated DNA:", result["sequence"])
print("Elapsed (ms):", result.get("elapsed_ms"))

Example output:

Generated DNA: ACGTACATATGTTCGTACATTCGCACAGACGCCATTTTGAAAAATGCTTTAAATGGATTCAGAATTGGTCAAAATGCATAAATCCATCAAAATTTTTTTC
Elapsed (ms): 10770

Cleaning up

To avoid unwanted charges, complete the steps in this section to clean up your resources.

Deleting the endpoint from SageMaker Studio

In SageMaker Studio, navigate to the Endpoints section in the left sidebar under Inference to view all your active endpoints. Locate your Evo-2 NIM endpoint in the list and select it to open the endpoint details page. On this page, there is a Delete button. Choose Delete and confirm the deletion when prompted. The endpoint status changes to Deleting and disappears from your endpoints list when the deletion is complete. This process typically takes a few minutes, and when it’s deleted the endpoint stops incurring charges immediately.

Delete the SageMaker endpoint

The SageMaker endpoint that you deployed incurs costs if you leave it running. Use the following code to delete the endpoint if you want to stop incurring charges. For more details, go to Delete endpoints and resources.

# Delete endpoint when done (important for cost management)
predictor.delete_endpoint()

Conclusion

The availability of NVIDIA Evo-2 NIM microservices on Amazon SageMaker Jumpstart represents a significant advancement for researchers and organizations working in drug discovery. This solution provides GPU-accelerated multiple sequence alignments and dramatically speeds up structure prediction pipelines that are critical for protein design and antibody research. Users can implement the flexible deployment options—through SageMaker Studio, or SageMaker SDK—to choose the approach that best fits their workflow and technical expertise. The optimized performance of these NIM microservices, combined with the scalability and security of SageMaker, enables faster time-to-insight while streamlining the deployment of complex biomolecular AI models. We encourage you to try the Evo-2 NIM today and look out for future release of MSA-search and Boltz-2 NIMs to accelerate your drug discovery workflows and use the power of NVIDIA’s specialized microservices on AWS infrastructure.

Multi-Tenant API Access: Centralize, Scale, and Secure Your Operations

Post Syndicated from Niall Curry original https://www.rapid7.com/blog/post/pt-multi-tenant-api-access-centralized-scaled-secured-operations

For teams managing dozens, or even hundreds, of tenants, API access quickly becomes operational overhead. Managed Security Service Providers and large enterprises often find themselves maintaining separate credentials for every environment, adding friction to automation, reporting, and day-to-day operations.

To address this, we are excited to announce multi-tenant API access, a new authentication capability designed to drive operational efficiency and consistent security outcomes across all your customers or environments.

Whether you are a MSSP or an enterprise managing multiple tenants, this new capability transforms how you programmatically access and manage data, allowing you to focus on security outcomes rather than script maintenance.

Managing API keys across multiple tenants to eliminate key sprawl

Without multi-tenant capabilities, a security team managing 50 tenants requires 50 unique credentials that need to be generated, named, and stored. This key sprawl creates overhead for rotation, increased risk of credential leakage, and makes cross-tenant reporting a challenge to automate effectively.

Meaning basic tasks, such as creating a consolidated compliance report, could turn into a multi-day integration project involving brittle scripts and large configuration files.

A centralized approach to multi-tenant API access

Multi-tenant API access introduces a centralized way to programmatically access data across all managed tenants with a single API key. Instead of maintaining individual tenant-specific credentials, you can use one key for many tenants.

At Rapid7, we’re introducing new multi-tenant admin keys that enable access to all current and future tenants, ensuring that new tenants require zero additional API configuration – saving security teams valuable time and effort.

Reducing operational overhead with multi-tenant API access

By removing the authentication bottleneck, our multi-tenant API keys enable security engineers to build a single integration that “loops” through tenants automatically, reducing the time they would otherwise have spent manually configuring API keys per tenant and the maintenance overhead that comes with this.

Using one key to provide seamless access to all tenant data, operations are simplified and the impact on efficiency is measurable: teams reclaim days of effort onboarding new tenants and rotating credentials experiencing 98% time savings overall.

Strengthening API security and compliance across tenants

Beyond efficiency, multi-tenant API access improves security visibility, reducing an organization’s attack surface by utilizing a single multi-tenant key. Fewer keys mean fewer opportunities for developers to accidentally hardcode credentials or leave orphaned keys active after a tenant is decommissioned.

This feature also streamlines compliance. It allows teams to run a single script to pull critical vulnerabilities or alerts across hundreds of tenants into a single dashboard, and enables efficient exports of audit logs across all tenants. 

Simplifying cross-tenant automation and reporting

Multi-tenant API access is about freeing security teams to focus on what matters. By centralizing credential control and simplifying automation, we are empowering analysts and engineers to act faster and reduce risk.

Want to see how multi-tenant API access can streamline your operations? Administrators can leverage this new capability by utilizing the new multi-tenant API key type and our new managed organizations API to retrieve details of your managed tenants, enabling you to create or update automation scripts to retrieve or manage data for any (or all) of your managed tenants via existing Rapid7 APIs.

GNU Awk 5.4.0 released

Post Syndicated from jzb original https://lwn.net/Articles/1060050/

Version
5.4.0
of GNU awk
(gawk) has been released. This is a major release with a change in
gawk’s default regular-expression matcher: it now uses MinRX
as the default regular-expression engine.

This matcher is fully POSIX compliant, which the current GNU matchers
are not. In particular it follows POSIX rules for finding the longest
leftmost submatches. It is also more strict as to regular expression
syntax, but primarily in a few corner cases that normal, correct,
regular expression usage should not encounter.

Because regular expression matching is such a fundamental part of
awk/gawk, the original GNU matchers are still included in gawk. In order
to use them, give a value to the GAWK_GNU_MATCHERS environment variable
before invoking gawk.

[…] The original GNU matchers will eventually be removed from
gawk. So, please take the time to notice and report any issues in the
MinRX matcher, so that they can be ironed out sooner rather than later.

See the release announcement for additional changes.

Firefox 148.0 released

Post Syndicated from jzb original https://lwn.net/Articles/1060047/

Version
148
of Firefox has been released. The most notable change in this
release is the addition of a “Block AI enhancements” option that
allows turning off “new or current AI enhancements in Firefox, or
pop-ups about them
” with a single toggle.

With this release, Firefox now supports the Trusted
Types API
to help prevent cross-site scripting attacks as well as
the Sanitizer
API
that provides new methods for HTML manipulation. See the release
notes for developers
for changes that may affect web developers or
those who create Firefox add-ons.

[$] As ye clone(), so shall ye AUTOREAP

Post Syndicated from corbet original https://lwn.net/Articles/1059673/

The facilities provided by the kernel for the management of processes have
evolved considerably in the last few years, driven mostly by the advent of
the pidfd API. A pidfd is a file
descriptor that refers to a process; unlike a process ID, a pidfd is an
unambiguous handle for a process; that makes it a safer, more deterministic
way of operating on processes. Christian Brauner, who has driven much of
the pidfd-related work, is proposing
two new flags
for the clone3()
system call, one of which changes the kernel’s security model in a
somewhat controversial way.

The collective thoughts of the interwebz