Build applications of any size on Cloudflare with the Queues open beta

Post Syndicated from Rob Sutter original https://blog.cloudflare.com/cloudflare-queues-open-beta/

Build applications of any size on Cloudflare with the Queues open beta

Build applications of any size on Cloudflare with the Queues open beta

Message queues are a fundamental building block of cloud applications—and today the Cloudflare Queues open beta brings queues to every developer building for Region: Earth. Cloudflare Queues follows Cloudflare Workers and Cloudflare R2 in a long line of innovative services built for the Workers Developer Platform, enabling developers to build more complex applications without configuring networks, choosing regions, or estimating capacity. Best of all, like many other Cloudflare services, there are no egregious egress charges!

Build applications of any size on Cloudflare with the Queues open beta

If you’ve ever purchased something online and seen a message like “you will receive confirmation of your order shortly,” you’ve interacted with a queue. When you completed your order, your shopping cart and information were stored and the order was placed into a queue. At some later point, the order fulfillment service picks and packs your items and hands it off to the shipping service—again, via a queue. Your order may sit for only a minute, or much longer if an item is out of stock or a warehouse is busy, and queues enable all of this functionality.

Message queues are great at decoupling components of applications, like the checkout and order fulfillment services for an ecommerce site. Decoupled services are easier to reason about, deploy, and implement, allowing you to ship features that delight your customers without worrying about synchronizing complex deployments.

Queues also allow you to batch and buffer calls to downstream services and APIs. This post shows you how to enroll in the open beta, walks you through a practical example of using Queues to build a log sink, and tells you how we built Queues using other Cloudflare services. You’ll also learn a bit about the roadmap for the open beta.

Getting started

Enrolling in the open beta

Open the Cloudflare dashboard and navigate to the Workers section. Select Queues from the Workers navigation menu and choose Enable Queues Beta.

Review your order and choose Proceed to Payment Details.

Note: If you are not already subscribed to a Workers Paid Plan, one will be added to your order automatically.

Enter your payment details and choose Complete Purchase. That’s it – you’re enrolled in the open beta! Choose Return to Queues on the confirmation page to return to the Cloudflare Queues home page.

Creating your first queue

After enabling the open beta, open the Queues home page and choose Create Queue. Name your queue `my-first-queue` and choose Create queue. That’s all there is to it!

The dash displays a confirmation message along with a list of all the queues in your account.

Build applications of any size on Cloudflare with the Queues open beta

Note: As of the writing of this blog post each account is limited to ten queues. We intend to raise this limit as we build towards general availability.

Managing your queues with Wrangler

You can also manage your queues from the command line using Wrangler, the CLI for Cloudflare Workers. In this section, you build a simple but complete application implementing a log aggregator or sink to learn how to integrate Workers, Queues, and R2.

Setting up resources
To create this application, you need access to a Cloudflare Workers account with a subscription plan, access to the Queues open beta, and an R2 plan.

Install and authenticate Wrangler then run wrangler queues create log-sink from the command line to create a queue for your application.

Run wrangler queues list and note that Wrangler displays your new queue.

Note: The following screenshots use the jq utility to format the JSON output of wrangler commands. You do not need to install jq to complete this application.

Build applications of any size on Cloudflare with the Queues open beta

Finally, run wrangler r2 bucket create log-sink to create an R2 bucket to store your aggregated logs. After the bucket is created, run wrangler r2 bucket list to see your new bucket.

Build applications of any size on Cloudflare with the Queues open beta

Creating your Worker
Next, create a Workers application with two handlers: a fetch() handler to receive individual incoming log lines and a queue() handler to aggregate a batch of logs and write the batch to R2.

In an empty directory, run wrangler init to create a new Cloudflare Workers application. When prompted:

  • Choose “y” to create a new package.json
  • Choose “y” to use TypeScript
  • Choose “Fetch handler” to create a new Worker at src/index.ts
Build applications of any size on Cloudflare with the Queues open beta

Open wrangler.toml and replace the contents with the following:

wrangler.toml

name = "queues-open-beta"
main = "src/index.ts"
compatibility_date = "2022-11-03"
 
 
[[queues.producers]]
 queue = "log-sink"
 binding = "BUFFER"
 
[[queues.consumers]]
 queue = "log-sink"
 max_batch_size = 100
 max_batch_timeout = 30
 
[[r2_buckets]]
 bucket_name = "log-sink"
 binding = "LOG_BUCKET"

The [[queues.producers]] section creates a producer binding for the Worker at src/index.ts called BUFFER that refers to the log-sink queue. This Worker can place messages onto the log-sink queue by calling await env.BUFFER.send(log);

The [[queues.consumers]] section creates a consumer binding for the log-sink queue for your Worker. Once the log-sink queue has a batch ready to be processed (or consumed), the Workers runtime will look for the queue() event handler in src/index.ts and invoke it, passing the batch as an argument. The queue() function signature looks as follows:

async queue(batch: MessageBatch<Error>, env: Environment): Promise<void> {

The final binding in your wrangler.toml creates a binding for the log-sink R2 bucket that makes the bucket available to your Worker via env.LOG_BUCKET.

src/index.ts

Open src/index.ts and replace the contents with the following code:

export interface Env {
 BUFFER: Queue;
 LOG_BUCKET: R2Bucket;
}
 
export default {
 async fetch(request: Request, env: Environment): Promise<Response> {
   let log = await request.json();
   await env.BUFFER.send(log);
   return new Response("Success!");
 },
 async queue(batch: MessageBatch<Error>, env: Environment): Promise<void> {
   const logBatch = await JSON.stringify(batch.messages);
   await env.LOG_BUCKET.put(`logs/${Date.now()}.log.json`, logBatch);
 },
};

The export interface Env section exposes the two bindings you defined in wrangler.toml: a queue named BUFFER and an R2 bucket named LOG_BUCKET.

The fetch() handler transforms the request body into JSON, adds the body to the BUFFER queue, then returns an HTTP 200 response with the message Success!

The `queue()` handler receives a batch of messages that each contain log entries, iterates through concatenating each log into a string buffer, then writes that buffer to the LOG_BUCKET R2 bucket using the current timestamp as the filename.

Publishing and running your application
To publish your log sink application, run wrangler publish. Wrangler packages your application and its dependencies and deploys it to Cloudflare’s global network.

Build applications of any size on Cloudflare with the Queues open beta

Note that the output of wrangler publish includes the BUFFER queue binding, indicating that this Worker is a producer and can place messages onto the queue. The final line of output also indicates that this Worker is a consumer for the log-sink queue and can read and remove messages from the queue.

Use your favorite API client, like curl, httpie, or Postman, to send JSON log entries to the published URL for your Worker via HTTP POST requests. Navigate to your log-sink R2 bucket in the Cloudflare dashboard and note that the logs prefix is now populated with aggregated logs from your request.

Build applications of any size on Cloudflare with the Queues open beta

Download and open one of the logfiles to view the JSON array inside. That’s it – with fewer than 45 lines of code and config, you’ve built a log aggregator to ingest and store data in R2!

Build applications of any size on Cloudflare with the Queues open beta

Buffering R2 writes with Queues in the real world

In the previous example, you create a simple Workers application that buffers data into batches before writing the batches to R2. This reduces the number of calls to the downstream service, reducing load on the service and saving you money.

UUID.rocks, the fastest UUIDv4-as-a-service, wanted to confirm whether their API truly generates unique IDs on every request. With 80,000 requests per day, it wasn’t trivial to find out. They decided to write every generated UUID to R2 to compare IDs across the entire population. However, writing directly to R2 at the rate UUIDs are generated is inefficient and expensive.

To reduce writes and costs, UUID.rocks introduced Cloudflare Queues into their UUID generation workflow. Each time a UUID is requested, a Worker places the value of the UUID into a queue. Once enough messages have been received, the buffered batch of JSON objects is written to R2. This avoids invoking an R2 write on every API call, saving costs and making the data easier to process later.

The uuid-queue application consists of a single Worker with three event handlers:

  1. A fetch handler that receives a JSON object representing the generated UUID and writes it to a Cloudflare Queue.
  2. A queue handler that writes batches of JSON objects to R2 in CSV format.
  3. A scheduled handler that combines batches from the previous hour into a single file for future processing.

To view the source or deploy this application into your own account, visit the repository on GitHub.

How we built Cloudflare Queues

Like many of the Cloudflare services you use and love, we built Queues by composing other Cloudflare services like Workers and Durable Objects. This enabled us to rapidly solve two difficult challenges: securely invoking your Worker from our own service and maintaining a strongly consistent state at scale. Several recent Cloudflare innovations helped us overcome these challenges.

Securely invoking your Worker

In the Before Times (early 2022), invoking one Worker from another Worker meant a fresh HTTP call from inside your script. This was a brittle experience, requiring you to know your downstream endpoint at deployment time. Nested invocations ran as HTTP calls, passing all the way through the Cloudflare network a second time and adding latency to your request. It also meant security was on you – if you wanted to control how that second Worker was invoked, you had to create and implement your own authentication and authorization scheme.

Worker to Worker requests
During Platform Week in May 2022, Service Worker Bindings entered general availability. With Service Worker Bindings, your Worker code has a binding to another Worker in your account that you invoke directly, avoiding the network penalty of a nested HTTP call. This removes the performance and security barriers discussed previously, but it still requires that you hard-code your nested Worker at compile time. You can think of this setup as “static dispatch,” where your Worker has a static reference to another Worker where it can dispatch events.

Dynamic dispatch
As Service Worker Bindings entered general availability, we also launched a closed beta of Workers for Platforms, our tool suite to help make any product programmable. With Workers for Platforms, software as a service (SaaS) and platform providers can allow users to upload their own scripts and run them safely via Cloudflare Workers. User scripts are not known at compile time, but are dynamically dispatched at runtime.

Workers for Platforms entered general availability during GA week in September 2022, and is available for all customers to build with today.

With dynamic dispatch generally available, we now have the ability to discover and invoke Workers at runtime without the performance penalty of HTTP traffic over the network. We use dynamic dispatch to invoke your queue’s consumer Worker whenever a message or batch of messages is ready to be processed.

Consistent stateful data with Durable Objects

Another challenge we faced was storing messages durably without sacrificing performance. We took the design goal of ensuring that all messages were persisted to disk in multiple locations before we confirmed receipt of the message to the user. Again, we turned to an existing Cloudflare product—Durable Objects—which entered general availability nearly one year ago today.

Durable Objects are named instances of JavaScript classes that are guaranteed to be unique across Cloudflare’s entire network. Durable Objects process messages in-order and on a single-thread, allowing for coordination across messages and provide a strongly consistent storage API for key-value pairs. Offloading the hard problem of storing data durably in a distributed environment to Distributed Objects allowed us to reduce the time to build Queues and prepare it for open beta.

Open beta roadmap

Our open beta process empowers you to influence feature prioritization and delivery. We’ve set ambitious goals for ourselves on the path to general availability, most notably supporting unlimited throughput while maintaining 100% durability. We also have many other great features planned, like first-in first-out (FIFO) message processing and API compatibility layers to ease migrations, but we need your feedback to build what you need most, first.

Conclusion

Cloudflare Queues is a global message queue for the Workers developer. Building with Queues makes your applications more performant, resilient, and cost-effective—but we’re not done yet. Join the Open Beta today and share your feedback to help shape the Queues roadmap as we deliver application integration services for the next generation cloud.

The road to a more standards-compliant Workers API

Post Syndicated from James M Snell original https://blog.cloudflare.com/standards-compliant-workers-api/

The road to a more standards-compliant Workers API

The road to a more standards-compliant Workers API

Earlier this year, we announced our participation in a new W3C Community Group for the advancement of Web-interoperable API standards. Since then, this new WinterCG has been hard at work identifying the common API standards around which all JavaScript runtimes can build. Today I just want to give a peek at some work the WinterCG has been doing; and show off some of the improvements we have been making in the Workers runtime to increase alignment with Web Platform standards around event handling, task cancellation using AbortController, text encoding and decoding, URL parsing and pattern matching, and streams support.

The WinterCG Minimum Common Web Platform API

Right at the start of the WinterCG activity, the group took some time to evaluate and compare the various non-browser JavaScript runtimes such as Node.js, Deno, Bun, and Workers with the purpose of identifying the Web Platform APIs they all had in common. Following a very simple criteria, we looked at the standard APIs that were already implemented and supported by at least two of these runtimes and compiled those into a list that the WinterCG calls the “Minimum Common Web Platform API“. This list will serve as the basis for what the community group defines as the minimum set of Web Platform APIs that should be implemented consistently across runtimes that claim to be “Web-interoperable”.

The current list is straightforward:

AbortController ReadableStreamDefaultController
AbortSignal ReadableStreamDefaultReader
ByteLengthQueuingStrategy SubtleCrypto
CompressionStream TextDecoder
CountQueuingStrategy TextDecoderStream
Crypto TextEncoder
CryptoKey TextEncoderStream
DecompressionStream TransformStream
DOMException TransformStreamDefaultController
Event URL
EventTarget URLPattern
ReadableByteStreamController URLSearchParams
ReadableStream WritableStream
ReadableStreamBYOBReader WritableStreamDefaultController
ReadableStreamBYOBRequest  

In addition to these, the WinterCG also expects Web-interoperable runtimes to have implementations of the atob(), btoa(), queueMicrotask(), structuredClone(), setTimeout(), clearTimeout(), setInterval(), clearInterval(), console, and crypto.subtle APIs available on the global scope.

Today, we are happy to say that the Workers runtime has compliant or nearly compliant implementations of every one of these WinterCG Minimum Common Web Platform APIs. Some of these APIs intentionally diverge from the standards either due to backwards compatibility concerns, Workers-specific features, or performance optimizations. Other APIs diverge still because we are still in the process of updating them to align with the specifications.

Improving standards compliance in the Workers runtime

The Workers runtime has, from the beginning, had the mission to align its developer experience with JavaScript and Web Platform standards as much as possible. Over the past year we have worked hard to continue advancing that mission forward both by improving the standards-compliance of existing APIs such as Event, EventTarget, URL, and streams; and the introduction of new Web Platform APIs such as URLPattern, encoding streams, and compression streams.

Event and EventTarget

The Workers runtime has provided an implementation of the Event and EventTarget Web Platform APIs from the very beginning. These were, however, only limited implementations of what the WHATWG DOM specification defines. Specifically, Workers had only implemented the bare minimum of the Event API that it itself needed to operate.

Today, the Event and EventTarget implementations in Workers provide a more complete implementation.

Let’s look at the official definition of Event as defined by the WHATWG DOM standard:

[Exposed=*]
interface Event {
  constructor(DOMString type, optional EventInit eventInitDict = {});
 
  readonly attribute DOMString type;
  readonly attribute EventTarget? target;
  readonly attribute EventTarget? srcElement; // legacy
  readonly attribute EventTarget? currentTarget;
  sequence<EventTarget> composedPath();
 
  const unsigned short NONE = 0;
  const unsigned short CAPTURING_PHASE = 1;
  const unsigned short AT_TARGET = 2;
  const unsigned short BUBBLING_PHASE = 3;
  readonly attribute unsigned short eventPhase;
 
  undefined stopPropagation();
           attribute boolean cancelBubble; // legacy alias of .stopPropagation()
  undefined stopImmediatePropagation();
 
  readonly attribute boolean bubbles;
  readonly attribute boolean cancelable;
           attribute boolean returnValue;  // legacy
  undefined preventDefault();
  readonly attribute boolean defaultPrevented;
  readonly attribute boolean composed;
 
  [LegacyUnforgeable] readonly attribute boolean isTrusted;
  readonly attribute DOMHighResTimeStamp timeStamp;
 
  undefined initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false); // legacy
};
 
dictionary EventInit {
  boolean bubbles = false;
  boolean cancelable = false;
  boolean composed = false;
};

Web Platform API specifications are always written in terms of a definition language called Web IDL. Every attribute defined in the interface is a property that is exposed on the object. Event objects, then, are supposed to have properties like type, target, srcElement, currentTarget, bubbles, cancelable, returnValue, defaultPrevented, composed, isTrusted, and timeStamp. They are also expected to have methods such as composedPath(), stopPropagation(), and stopImmediatePropagation(). Because most of these were not immediately needed by Workers, most were not provided originally.

Today, all standard, non-legacy properties and methods defined by the specification are available for use:

 const event = new Event('foo', {
    bubbles: false,
    cancelable: true,
    composed: true,
  });
 
  console.log(event.bubbles);
  console.log(event.cancelable);
  console.log(event.composed);
  
  addEventListener('foo', (event) => {
    console.log(event.eventPhase);  // 2 AT_TARGET
    console.log(event.currentTarget);
    console.log(event.composedPath());
  });
 
  dispatchEvent(event);

While we were at it, we also fixed a long standing bug in the implementation of Event that prevented user code from properly subclassing the Event object to create their own custom event types. This change is protected by a compatibility flag that is now enabled by default for all Workers using a compatibility date on or past 2022-01-31.

  class MyEvent extends Event {
    constructor() {
      super('my-event')
    }
 
    get type() { return super.type.toUpperCase() }
  }
 
  const myEvent = new MyEvent();
  // Previously, this would print "my-event" instead of "MY-EVENT" as expected.
  console.log(myEvent.type);

The EventTarget implementation has also been updated to support once handlers (event handlers that are triggered at-most once then automatically unregistered), cancelable handlers (using AbortSignal), and event listener objects, all in line with the standard.

Using a one-time event handler

  addEventListener('foo', (event) => {
    console.log('printed only once');
  }, {
    once: true
  });
 
  dispatchEvent(new Event('foo'));
  dispatchEvent(new Event('foo'));

Once handlers are key for preventing memory leaks in your applications when you know that a particular event is only ever going to be emitted once, or whenever you only care about handling it once. The stored reference to the function or object that is handling the event is removed immediately upon the first invocation, allowing the memory to be garbage collected.

Using a cancelable event handler

  const ac = new AbortController();
 
  addEventListener('foo', (event) => {
    console.log('not printed at all');
  }, {
    signal: ac.signal
  });
 
  ac.abort();
 
  dispatchEvent(new Event('foo'));

Using an event listener object

While passing a function to addEventListener() is the most common case, the standard actually allows an event listener to be an object with a handleEvent() method as well.

  const listener = {
    handleEvent(event) {
      console.log(event.type);
    }
  };
 
  addEventListener('foo', listener);
  addEventListener('bar', listener);
 
  dispatchEvent(new Event('foo'));
  dispatchEvent(new Event('bar'));

AbortController and AbortSignal

As illustrated in the cancelable event example above, we have also introduced an implementation of the AbortController and AbortSignal APIs into Workers. These provide a standard, and interoperable way of signaling cancellation of several kinds of tasks.

The AbortController/AbortSignal pattern is straightforward: An AbortSignal is just a type of EventTarget that will emit a single “abort” event when it is triggered:

  const ac = new AbortController();
 
  ac.signal.addEventListener('abort', (event) => {
    console.log(event.reason);  // 'just because'
  }, { once: true });
 
  ac.abort('just because');

The AbortController is used to actually trigger the abort event, optionally with a reason argument that is passed on to the event. The reason is typically an Error object but can be any JavaScript value.

The AbortSignal can only be triggered once, so the “abort” event should only ever be emitted once.

It is also possible to create AbortSignals that timeout after a specified period of time:

const signal = AbortSignal.timeout(10);

Or an AbortSignal that is pre-emptively triggered immediately on creation (these will never actually emit the “abort” event):

const signal = AbortSignal.abort('for reasons');

Currently, within Workers, AbortSignal and AbortController has been integrated with the EventTarget, fetch(), and streams APIs in alignment with the relevant standard specifications for each.

Using AbortSignal to cancel a fetch()

  const ac = new AbortController();
 
  const res = fetch('https://example.org', {
    signal: ac.signal
  });
 
  ac.abort(new Error('canceled'))
 
  try {
    await res;
  } catch (err) {
    console.log(err);
  }

TextEncoderStream and TextDecoderStream

The Workers runtime has long provided basic implementations of the TextEncoder and TextDecoder APIs. Initially, these were limited to only supporting encoding and decoding of UTF-8 text. The standard definition of TextDecoder, however, defines a much broader range of text encodings that are now fully supported by the Workers implementation. Per the standard, TextEncoder currently only supports UTF-8.

  const win1251decoder = new TextDecoder("windows-1251");
  const bytes = new Uint8Array([
    207, 240, 232, 226, 229, 242, 44, 32, 236, 232, 240, 33,
  ]);
  console.log(win1251decoder.decode(bytes)); // Привет, мир!

In addition to supporting the full range of encodings defined by the standard, Workers also now provides implementations of the TextEncoderStream and TextDecoderStream, which provide TransformStream implementations that apply encoding and decoding to streaming data:

  const { writable, readable } = new TextDecoderStream("windows-1251");
 
  const writer = writable.getWriter();
  writer.write(new Uint8Array([
    207, 240, 232, 226, 229, 242, 44, 32, 236, 232, 240, 33,
  ]));
 
  const reader = readable.getReader();
  const res = await reader.read();
  console.log(res.value); // Привет, мир!

Using the encoding streams requires the use of the transformstream_enable_standard_constructor compatibility flag.

CompressionStream and DecompressionStream

Streaming compression and decompression is also now supported in the runtime using the standard CompressionStream and DecompressionStream APIs.

const ds = new DecompressionStream('gzip');
const decompressedStream = blob.stream().pipeThrough(ds);

const cs = new CompressionStream('gzip');
const compressedStream = blob.stream().pipeThrough(cs);

These are TransformStream implementations that fully conform to the standard definitions. Use of the compression streams does not require a compatibility flag to enable.

URL and URLPattern

Similar to Event, there has been an implementation of the Web Platform standard URL API available within Workers from nearly the beginning. But also like Event, the implementation was not entirely compatible with the standard.

The incompatibilities were subtle, for instance, in the original implementation, the URL string “https://a//b//c//” would be parsed incorrectly as “https://a/b/c” (note that the extra empty path segments are removed) whereas the standard parsing algorithm would produce “https://a//b//c/” as a result. Such inconsistent results were causing interoperability issues with JavaScript written to run across multiple JavaScript runtimes and needed to be fixed.

A new implementation of the URL parsing algorithm has been provided, and as of October 31, 2022 it has been enabled by default for all newly deployed Workers. Older Workers can begin using the new implementation by updating their compatibility dates to 2022-10-31 or by enabling the url_standard compatibility flag.

Along with the updated URL implementation, Workers now provides an implementation of the standard URLPattern API.

URLPattern provides a regular-expression-like syntax for matching a URL string against a pattern. For instance, consider this example taken from the MDN documentation for URLPattern:

  // Matching a pathname
  let pattern1 = new URLPattern('https://example.com/books/:id')
  // same as
  let pattern2 = new URLPattern(
    '/books/:id',
    'https://example.com',
  );
  // or
  let pattern3 = new URLPattern({
    protocol: 'https',
    hostname: 'example.com',
    pathname: '/books/:id',
  });
  // or
  let pattern4 = new URLPattern({
    pathname: '/books/:id',
    baseURL: 'https://example.com',
  });

ReadableStream, WritableStream, and TransformStream

Last, but absolutely not least, our most significant effort over the past year has been providing new standards compliant implementations of the ReadableStream, WritableStream, and TransformStream APIs.

The Workers runtime has always provided an implementation of these objects but they were never fully conformant to the standard. User code was not capable of creating custom ReadableStream and WritableStream instances, and TransformStreams were limited to simple identity pass-throughs of bytes. The implementations have been updated now to near complete compliance with the standard (near complete because we still have a few edge cases and features we are working on).

The new streams implementation will be enabled by default in all new Workers as of November 30, 2022, or can be enabled earlier using the streams_enable_constructors and transformstream_enable_standard_constructor compatibility flags.

Creating a custom ReadableStream

async function handleRequest(request) {
  const enc = new TextEncoder();

  const rs = new ReadableStream({
    pull(controller) {
      controller.enqueue(enc.encode('hello world'));
      controller.close();
    }
  });

  return new Response(rs);
}

The new implementation supports both “regular” and “bytes” ReadableStream types, supports BYOB readers, and includes performance optimizations for both tee() and pipeThrough().

Creating a custom WritableStream

  const ws = new WritableStream({
    write(chunk) {
      console.log(chunk);  // "hello world"
    }
  });
 
  const writer = ws.getWriter();
  writer.write("hello world");

WritableStreams are fairly simple objects that can accept any JavaScript value written to them.

Creating a custom TransformStream

  const { readable, writable } = new TransformStream({
    transform(chunk, controller) {
      controller.enqueue(chunk.toUpperCase());
    }
  });
 
  const writer = writable.getWriter();
  const reader = readable.getReader();
 
  writer.write("hello world");
 
  const res = await reader.read();
  console.log(res.value);  // "HELLO WORLD"

It has always been possible in Workers to call new TransformStream() (with no arguments) to create a limited version of a TransformStream that only accepts bytes and only acts as a pass-through, passing the bytes written to the writer on to the reader without any modification.

That original implementation is now available within Workers using the IdentityTransformStream class.

  const { readable, writable } = new IdentityTransformStream();
 
  const writer = writable.getWriter();
  const reader = readable.getReader();
 
  const enc = new TextEncoder();
  const dec = new TextDecoder();
 
  writer.write(enc.encode("hello world"));
 
  const res = await reader.read();
  console.log(dec.decode(res.value));  // "hello world"

If your code is using new TransformStream() today as this kind of pass-through, the new implementation will continue to work except for one very important difference: the old, non-standard implementation of new TransformStream() supported BYOB reads on the readable side (i.e. readable.getReader({ mode: 'byob' })). The new implementation (enabled via a compatibility flag and becoming the default on November 30 ) does not support BYOB reads as required by the stream standard.

What’s next

It is clear that we have made a lot of progress in improving the standards compliance of the Workers runtime over the past year, but there is far more to do. Next we will be turning our attention to the implementation of the fetch() and WebSockets APIs, as well as actively seeking closer alignment with other runtimes through collaboration in the Web-interoperable Runtimes Community Group.

If you are interested in helping drive the implementation of Web Platform APIs forward, and advancing interoperability between JavaScript runtime environments, the Workers Runtime team at Cloudflare is hiring! Reach out, or see our open positions here.

A Digital Red Cross

Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2022/11/a-digital-red-cross.html

The International Committee of the Red Cross wants some digital equivalent to the iconic red cross, to alert would-be hackers that they are accessing a medical network.

The emblem wouldn’t provide technical cybersecurity protection to hospitals, Red Cross infrastructure or other medical providers, but it would signal to hackers that a cyberattack on those protected networks during an armed conflict would violate international humanitarian law, experts say, Tilman Rodenhäuser, a legal adviser to the International Committee of the Red Cross, said at a panel discussion hosted by the organization on Thursday.

I can think of all sorts of problems with this idea and many reasons why it won’t work, but those also apply to the physical red cross on buildings, vehicles, and people’s clothing. So let’s try it.

EDITED TO ADD: Original reference.

Kernel prepatch 6.1-rc5

Post Syndicated from original https://lwn.net/Articles/914747/

Linus has released 6.1-rc5 for testing.

But we’ll see. If things don’t start calming down, this may be one
of those releases that need an extra week. It wasn’t a particularly
big merge window, but I don’t particularly like how the rc’s keep
being on the bigger side.

Седмицата (7–12 ноември)

Post Syndicated from Светла Енчева original https://toest.bg/editorial-7-12-nov-2022/

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

Междувременно Русия обяви, че се изтегля от Херсон (макар да продължава да го смята за своя територия след анексията в края на септември), и съответно Украйна навлезе в него. Става въпрос не само за самия град, а и за обширна област от западната част на Днепър, завладяна от руската армия. След изтеглянето ѝ цялата окупирана територия на Украйна ще бъде от източната част на реката, а снабдяването на Крим ще се затрудни допълнително.

Александър Нуцов

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

Емилия Милчева

За здравето на българската демокрация е важно с чий мандат ще се състави следващото редовно правителство, казва Емилия Милчева в седмичния си политически коментар. Все повече погледи се насочват към третия мандат, фаворит за който е смятана партията на бившия служебен премиер Стефан Янев „Български възход“. Генерал Янев пък демонстрира готовност да се нагърби отново с поста на министър-председател, обратнопропорционална на последователността в политическите му възгледи. Той вече цитира не Путин, а Кенеди. Същевременно скоростта и размахът, с които четвъртият служебен кабинет изчегъртва назначенията на правителството на Кирил Петков, са забележителни. А България върви към неформална президентска република.

Меглена Боденска

На 6 октомври 82-годишната Ани Ерно стана лауреатка на Нобеловата награда за литература. Новата ни авторка Меглена Боденска ни представя портрет на френската писателка, която има повече от 20 романа, но на български език са преведени само два от тях. Отличаването ѝ става в контекста на движението #MeToo, което хвърля сянка и върху Шведската академия. Ерно приема наградата като отговорност да продължи борбата срещу несправедливостите, извършвани не само спрямо жените, а и спрямо „доминираните“, казано с думите на френския социолог Пиер Бурдийо.

Михаил Ангелов

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

Севда Семер

В рубриката „На второ четене“ Севда Семер ни препоръчва романа на Колсън Уайтхед „Момчетата от Никел“. Това е книга, просмукана от дълбок мрак, която се базира на истинската история на поправително училище във Флорида, функционирало цели 111 години въпреки данните за ужасяващо насилие от страна на надзирателите върху децата, включително стотина убийства. Момчета, предимно чернокожи, са „осъдени“ от обществото да се озоват в този интернат, независимо от способностите и житейските си амбиции. Романът, в който има много болка, но и надежда, носи на автора си втора награда „Пулицър“.

Нали си знаете, че няма да ви оставя без лични препоръки? Този път те са по повод падането на тоталитарния режим, което на 10 ноември навърши Христова възраст. Нямам конкретна препоръка, по-скоро ми идват наум доста филми, които по един или друг начин критикуват периода преди 1989 г. Ако ви се гледат сериозни или трагични филми – „Вчера“, „Маргарит и Маргарита“, „Да обичаш на инат“, „Една жена на 33“, „Понеделник сутрин“… Ако предпочитате комедии – „Преброяване на дивите зайци“ и „Кит“… Това е само малка част от многото филми, които разкриват фалша и двойните стандарти на онези времена.

Източник

Седмицата (7–12 ноември)

Post Syndicated from Светла Енчева original https://www.toest.bg/editorial-7-12-nov-2022/

Седмицата (7–12 ноември)

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

Междувременно Русия обяви, че се изтегля от Херсон (макар да продължава да го смята за своя територия след анексията в края на септември), и съответно Украйна навлезе в него. Става въпрос не само за самия град, а и за обширна област от западната част на Днепър, завладяна от руската армия. След изтеглянето ѝ цялата окупирана територия на Украйна ще бъде от източната част на реката, а снабдяването на Крим ще се затрудни допълнително.


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


За здравето на българската демокрация е важно с чий мандат ще се състави следващото редовно правителство, казва Емилия Милчева в седмичния си политически коментар. Все повече погледи се насочват към третия мандат, фаворит за който е смятана партията на бившия служебен премиер Стефан Янев „Български възход“. Генерал Янев пък демонстрира готовност да се нагърби отново с поста на министър-председател, обратнопропорционална на последователността в политическите му възгледи. Той вече цитира не Путин, а Кенеди. Същевременно скоростта и размахът, с които четвъртият служебен кабинет изчегъртва назначенията на правителството на Кирил Петков, са забележителни. А България върви към неформална президентска република.


На 6 октомври 82-годишната Ани Ерно стана лауреатка на Нобеловата награда за литература. Новата ни авторка Меглена Боденска ни представя портрет на френската писателка, която има повече от 20 романа, но на български език са преведени само два от тях. Отличаването ѝ става в контекста на движението #MeToo, което хвърля сянка и върху Шведската академия. Ерно приема наградата като отговорност да продължи борбата срещу несправедливостите, извършвани не само спрямо жените, а и спрямо „доминираните“, казано с думите на френския социолог Пиер Бурдийо.


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


В рубриката „На второ четене“ Севда Семер ни препоръчва романа на Колсън Уайтхед „Момчетата от Никел“. Това е книга, просмукана от дълбок мрак, която се базира на истинската история на поправително училище във Флорида, функционирало цели 111 години въпреки данните за ужасяващо насилие от страна на надзирателите върху децата, включително стотина убийства. Момчета, предимно чернокожи, са „осъдени“ от обществото да се озоват в този интернат, независимо от способностите и житейските си амбиции. Романът, в който има много болка, но и надежда, носи на автора си втора награда „Пулицър“.

Нали си знаете, че няма да ви оставя без лични препоръки? Този път те са по повод падането на тоталитарния режим, което на 10 ноември навърши Христова възраст. Нямам конкретна препоръка, по-скоро ми идват наум доста филми, които по един или друг начин критикуват периода преди 1989 г. Ако ви се гледат сериозни или трагични филми – „Вчера“, „Маргарит и Маргарита“, „Да обичаш на инат“, „Една жена на 33“, „Понеделник сутрин“… Ако предпочитате комедии – „Преброяване на дивите зайци“ и „Кит“… Това е само малка част от многото филми, които разкриват фалша и двойните стандарти на онези времена.

Президентско изчегъртване. Поредно

Post Syndicated from Емилия Милчева original https://toest.bg/prezidentsko-izchegurtvane-poredno/

За здравето на българската демокрация е важно с чий мандат ще се състави следващото редовно правителство. Належащата необходимост от такова вече проличава в комуникацията между седемте политически сили в 48-мия парламент. Изглежда, че ГЕРБ са прежалили първия мандат, следователно надежди се възлагат на втория и третия, за който политици предизвестяват, че може да бъде връчен на партия „Български възход“, създадена от президентския човек Стефан Янев.

Винаги готов

Бившият бригаден генерал Янев отговаря в стила на военен – „Винаги готов!“ и за премиер, и за правителство. Той вече не цитира Путин, а Кенеди, и дори е обект на ХЕЙТ (написано от него с главни букви), задето БВ е подкрепила изпращането на оръжие за Украйна. За няколко месеца се е трансформирал от русофил, за когото натовските войски са „чуждестранни“, в надежден евро-атлантик, комуто може да се повери управлението на България – за трети път, след като беше премиер в две поредни служебни правителства за седем месеца през 2021 г.

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

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

правителството на ПП, са забележителни. Още в първите си дни направи това, което са вършили и останалите преди него – смени повечето областни управители и полицейски шефове по места. Но не му беше достатъчно – премина и към митниците и данъчните. Близо половината от тях, разкри „Свободна Европа“, са бивши кадри на армията, МВР, ДАНС и бившия репресивен апарат на комунистическата власт – Държавна сигурност. Към момента с нови ръководства са дирекции в министерства, агенции, комисии, държавни дружества и предприятия. „Подновен“ е мениджмънтът на АЕЦ „Козлодуй“ и „Булгаргаз“, както и на Агенция „Пътна инфраструктура“, след като обяви поръчка за поддръжка на пътища за 2,4 млрд. лв.

Кабинетът на Гълъб Донев подмени управата на Българската агенция по безопасност на храните, разкрила аферата на ГКПП „Капитан Андреево“ с частната лаборатория. Вкара двама нови членове в надзора на Българската банка за развитие, единият от които – Росен Карадимов – беше началник на кабинета на премиера на тройната коалиция Сергей Станишев, а името му се завъртя преди години в лобисткия скандал „Хохегер“. (Петер Хохегер стана известен, след като се разбра, че е лобирал за влизането на България в ЕС срещу хонорар от над 1,5 млн. евро по два договора от 2006 и 2008 г., подписани от кабинета „Станишев“.) Правителството на Донев отпуши назначения на консули и посланици, спрени от кабинета на Кирил Петков. „Капитал“ разнищи ударните смени на бордове на държавни предприятия, без конкурс, със статут на временно управляващи.

Освен до назначенията обаче, служебният кабинет се разпростря и до значими икономически и финансови решения.

Удължи до 2046 г. концесията на пристанище „Росенец“ в полза на „Лукойл Нефтохим Бургас“, договорът за която е бил сключен по време на първия мандат на Бойко Борисов като премиер. Направи го въпреки европейския регламент за ограничителни мерки за Русия заради войната в Украйна, забраняващ концесии на руснаци или руски компании, в т.ч. и на такива, които действат от името или в интерес на руснаци. С това действие обаче най-голямата частна компания в Русия получава изгодна концесия за две десетилетия напред и повишава шансовете си, ако продаде бизнеса, да спечели по-добра цена. Наред с това служебният кабинет се опита да издейства пробив в дерогацията, която ЕС даде на България, с възможността да продължи да ползва руски петрол до 2024 г. – поиска и износ на продукти, произведени с тази суровина. Европейската комисия отряза София.

Докъде

Докъде може и докъде не може да действа едно служебно правителство, назначено от президента? Правителството е с временен характер, казва Конституционният съд в известното си тълкувателно решение от 1992 г. – „предназначението му е да управлява текущите въпроси на вътрешната и външната политика на страната до провеждането на законодателни избори и съставянето на правителство от новоизбраното Народно събрание“. Управлява като редовно, но с ограничено време.

Спадат ли кадровите промени към „текущите въпроси“ е въпросът на въпросите.

Кабинетът не може да сключва международни договори, например за изтребители, тъй като те изискват одобрение от парламента. Но може да яхне метлата на уволненията и назначенията – и силният реваншизъм е отличителна черта на дейността на Донев и сие.

Първото служебно правителство на Румен Радев през 2017 г. начело с проф. Огнян Герджиков се придържаше основно към организирането на изборите. Макар че в един запис на разговор, публикуван от прокуратурата, хазартният бос Васил Божков казва как в първото му правителство на Радев „повече от половината бяха хора на Шиши“.

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

ще има една неформална президентска република.

Вторият президентски кабинет, в който министри бяха настоящите лидери на ПП Кирил Петков и Асен Василев, също извърши промени в редица институции и държавни фирми – в името на премахване на модела на ГЕРБ.

Въпросът с правомощията на служебното правителство обаче не трябва да зависи от личността на Румен Радев или обвързаностите на Борисов. Ако нямаше служебно управление, кабинетът на ГЕРБ щеше да организира изборите през 2021 г. и кой знае какво щеше да се получи предвид известните през годините манипулации. Но проблемът с купуването на гласове и изборните фалшификации не следва да се обвързва с необходимостта от служебен кабинет – това е проблем за разрешаване от органите на реда и правосъдната система.

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

Заглавна снимка: Стопкадър от видеоклип с обръщението на президента Румен Радев пред 48-мото НС на 19 октомври 2022 г.

Източник

Президентско изчегъртване. Поредно

Post Syndicated from Емилия Милчева original https://www.toest.bg/prezidentsko-izchegurtvane-poredno/

Президентско изчегъртване. Поредно

За здравето на българската демокрация е важно с чий мандат ще се състави следващото редовно правителство. Належащата необходимост от такова вече проличава в комуникацията между седемте политически сили в 48-мия парламент. Изглежда, че ГЕРБ са прежалили първия мандат, следователно надежди се възлагат на втория и третия, за който политици предизвестяват, че може да бъде връчен на партия „Български възход“, създадена от президентския човек Стефан Янев.

Винаги готов

Бившият бригаден генерал Янев отговаря в стила на военен – „Винаги готов!“ и за премиер, и за правителство. Тойвече не цитира Путин, а Кенеди, и дори е обект на ХЕЙТ (написано от него с главни букви), задето БВ е подкрепила изпращането на оръжие за Украйна. За няколко месеца се е трансформирал от русофил, за когото натовските войски са „чуждестранни“, в надежден евро-атлантик, комуто може да се повери управлението на България – за трети път, след като беше премиер в две поредни служебни правителства за седем месеца през 2021 г.

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

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

правителството на ПП, са забележителни. Още в първите си дни направи това, което са вършили и останалите преди него – смени повечето областни управители и полицейски шефове по места. Но не му беше достатъчно – премина и към митниците и данъчните. Близо половината от тях, разкри „Свободна Европа“, са бивши кадри на армията, МВР, ДАНС и бившия репресивен апарат на комунистическата власт – Държавна сигурност. Към момента с нови ръководства са дирекции в министерства, агенции, комисии, държавни дружества и предприятия. „Подновен“ е мениджмънтът на АЕЦ „Козлодуй“ и „Булгаргаз“, както и на Агенция „Пътна инфраструктура“, след като обяви поръчка за поддръжка на пътища за 2,4 млрд. лв.

Кабинетът на Гълъб Донев подмени управата на Българската агенция по безопасност на храните, разкрила аферата на ГКПП „Капитан Андреево“ с частната лаборатория. Вкара двама нови членове в надзора на Българската банка за развитие, единият от които – Росен Карадимов – беше началник на кабинета на премиера на тройната коалиция Сергей Станишев, а името му се завъртя преди години в лобисткия скандал „Хохегер“. (Петер Хохегер стана известен, след като се разбра, че е лобирал за влизането на България в ЕС срещу хонорар от над 1,5 млн. евро по два договора от 2006 и 2008 г., подписани от кабинета „Станишев“.) Правителството на Донев отпушиназначения на консули и посланици, спрени от кабинета на Кирил Петков. „Капитал“ разнищи ударните смени на бордове на държавни предприятия, без конкурс, със статут на временно управляващи.

Освен до назначенията обаче, служебният кабинет се разпростря и до значими икономически и финансови решения.

Удължи до 2046 г. концесията на пристанище „Росенец“ в полза на „Лукойл Нефтохим Бургас“, договорът за която е бил сключен по време на първия мандат на Бойко Борисов като премиер. Направи го въпреки европейския регламент за ограничителни мерки за Русия заради войната в Украйна, забраняващ концесии на руснаци или руски компании, в т.ч. и на такива, които действат от името или в интерес на руснаци. С това действие обаче най-голямата частна компания в Русия получава изгодна концесия за две десетилетия напред и повишава шансовете си, ако продаде бизнеса, да спечели по-добра цена. Наред с това служебният кабинет се опита да издейства пробив в дерогацията, която ЕС даде на България, с възможността да продължи да ползва руски петрол до 2024 г. – поиска и износ на продукти, произведени с тази суровина. Европейската комисия отряза София.

Докъде

Докъде може и докъде не може да действа едно служебно правителство, назначено от президента? Правителството е с временен характер, казва Конституционният съд в известното си тълкувателно решение от 1992 г. – „предназначението му е да управлява текущите въпроси на вътрешната и външната политика на страната до провеждането на законодателни избори и съставянето на правителство от новоизбраното Народно събрание“. Управлява като редовно, но с ограничено време.

Спадат ли кадровите промени към „текущите въпроси“ е въпросът на въпросите.

Кабинетът не може да сключва международни договори, например за изтребители, тъй като те изискват одобрение от парламента. Но може да яхне метлата на уволненията и назначенията – и силният реваншизъм е отличителна черта на дейността на Донев и сие.

Първото служебно правителство на Румен Радев през 2017 г. начело с проф. Огнян Герджиков се придържаше основно към организирането на изборите. Макар че в един запис на разговор, публикуван от прокуратурата, хазартният бос Васил Божков казва как в първото му правителство на Радев „повече от половината бяха хора на Шиши“.

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

ще има една неформална президентска република.

Вторият президентски кабинет, в който министри бяха настоящите лидери на ПП Кирил Петков и Асен Василев, също извърши промени в редица институции и държавни фирми – в името на премахване на модела на ГЕРБ.

Въпросът с правомощията на служебното правителство обаче не трябва да зависи от личността на Румен Радев или обвързаностите на Борисов. Ако нямаше служебно управление, кабинетът на ГЕРБ щеше да организира изборите през 2021 г. и кой знае какво щеше да се получи предвид известните през годините манипулации. Но проблемът с купуването на гласове и изборните фалшификации не следва да се обвързва с необходимостта от служебен кабинет – това е проблем за разрешаване от органите на реда и правосъдната система.

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

Научни новини: Биотехнологии и Космос

Post Syndicated from Михаил Ангелов original https://toest.bg/nauchni-novini-biotehnologii-i-kosmos/

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

Биотехнология в медицината

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

Болестта на Батен е рядко автозомно генетично заболяване, което причинява множество неврологични симптоми и води до по-кратка продължителност на живота. Една от формите му – НЦЛ1 – се среща при деца, които носят две копия на увредена версия на гена, кодиращ ензима PPT1. Децата ги наследяват от двама безсимптомни родители, които имат по едно копие от този ген.

До момента за изучаването на това заболяване са правени изследвания върху лабораторни мишки. Проблемът е, че техният мозък е значително по-малък от човешкия и промените, настъпващи вследствие на заболяването, не могат да бъдат проследени напълно. Това се решава с използването на генетично модифицирани овце. С помощта на CRISPR/Cas9 са редактирани яйцеклетки, които се износват от сурогатни майки. От получените животни, носещи по едно копие на увредения ген, впоследствие по естествен път се ражда потомство, при което се проявява заболяването. По този начин се пресъздава процесът при хората.

Модифицираните овце показват симптоми и промени в мозъка, сходни с тези при хората, поради което учените смятат, че е направена важна стъпка за вникването в патологията на заболяването, подобряването на диагностиката и откриването на лечение. Този подход вече се прилага при изучаването и на други редки автозомни заболявания (например болестта на Хънтингтън и синдрома на Луи Бар), като се използват прасета вместо овце.

Интересен напредък има и в областта на синтетичните молекули. Сферичните нуклеинови киселини са изкуствени наноструктури, създадени преди почти 30 години. Те са изградени от сърцевина, обвита плътно от множество молекули на ДНК или РНК. Първоначално тя се е изработвала от злато, но с развитието на технологията се влагат и други материали – сребро, силиций, протеини, липозоми и др. Така частицата, наред с възможността си да носи обвивката от нуклеинови киселини, може да придобие най-различни свойства – магнитни, каталитични, луминесцентни.

От особен интерес е способността на тези наночастици да преминават лесно през клетъчните мембрани и така да бъдат използвани като транспортен механизъм в тъканите на живи организми. Няколко компании вече прилагат технологията в разработката на нови видове ваксини, тестове за диагностика и терапии за различни заболявания, в т.ч. и на COVID-19.

Наскоро екип с участието на създателя на сферичните нуклеинови киселини предложи нов механизъм за генетични трансформации. Вместо традиционните вирусни вектори се използват наночастици с ядро от вече познатия ни протеин Cas9 и с обвивка от ДНК и насочващи РНК молекули. Cas9 е модифициран по начин, който позволява на частиците да избегнат клетъчните механизми за защита и да повишат ефективността на редактиране. Употребата на вирусни вектори е една от спорните теми в генната терапия и възможността да ги избегнем ни води стъпка по-близо до по-широкото ѝ приложение.

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

До момента повечето опити в тази насока стъпват на откритието, че носителите на генната мутация CCR5-Delta32 се заразяват значително по-трудно с ХИВ. За съжаление, експериментите за прехвърляне на тази мутация в пациенти в повечето случаи са или неуспешни, или не дават достатъчно информация, за да се извади заключение от тях.

Може би най-известният случай е от 2018 г., когато китайският учен Хъ Дзиен-куей съобщи за раждането на първите генномодифицирани бебета, чиито ембриони са били редактирани, за да носят мутацията и потенциално да бъдат защитени от ХИВ. Първите успехи обаче са постигнати с по-традиционни подходи – вече са известни трима души, излекувани чрез трансплантация, наложила се поради онкологично заболяване. При първите двама е използван костен мозък, а при третия – кръв от пъпна връв. По време на подбора на донор са търсени носители на мутацията CCR5-Delta32 и по този начин на пациентите се дава шанс да изградят нова имунна система, устойчива на вируса. Но този подход в общия случай не е приложим, тъй като носи голям риск.

Иновацията в подхода на Excision е, че те се насочват към самия вирус с помощта на CRISPR/Cas9. С изрязването на два участъка от генома на вируса, отговорни за неговата репликация, се нарушава способността му да създава нови свои копия и се дава възможност на тялото да синтезира нови имунни клетки, чисти от вируса. Преди прилагането му при човек методът е минал успешни изпитания при мишки и макаци и не са установени странични редакции. Проучването вече е в стадий на наблюдение и се очаква скоро да бъдат обявени резултати от него. Ако експериментът е успешен, това не само ще бъде важен момент за терапията на ХИВ, но и ще даде тласък за приложението на метода при други заболявания.

Космос

За сравнително краткото време от започването на наблюденията с космическия телескоп „Джеймс Уеб“ той вече се утвърждава като източник на възхитителни нови открития и снимки.

Един от последните обекти, към които бе насочен телескопът, са т.нар. Стълбове на сътворението, заснети за пръв път от космическия телескоп „Хъбъл“ през 1995 г. Това са образувания от водороден газ и прах, намиращи се на около 6500 светлинни години от Земята, в мъглявината Орел. Тя е с внушителни размери и е един от най-активните региони, в които се създават нови звезди в нашата галактика. Самите „стълбове“ са високи около четири светлинни години – четири пъти по-големи от Слънчевата система. Вследствие на турбуленция в тях се образуват по-плътни участъци, които при достигане на достатъчна маса преминават през гравитационен колапс, загряват се и така започва процесът на образуване на нови звезди.

Стълбовете на сътворението, заснети във видимия спектър от „Хъбъл“ през 2014 г. (вляво), и изображението от NIRCam на „Джеймс Уеб“ (вдясно) © NASA, ESA, CSA, STScI, Hubble Heritage Project (STScI, AURA); Joseph DePasquale, Anton M. Koekemoer, Alyssa Pagan (STScI)

 

Наблюденията са направени с два от инструментите на космическия телескоп – NIRCam и MIRI, работещи съответно в спектъра на близката и средната инфрачервена светлина.

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

Детайли от Стълбовете на сътворението, заснети от MIRI на „Джеймс Уеб“ © NASA, ESA, CSA, STScI; Joseph DePasquale, Alyssa Pagan (STScI)

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

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

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

Марсоходът Curiosity, изследващ повърхността на планетата от над 10 години, сега е достигнал до богат на минерални отлагания район, забелязан от орбиталната обсерватория Mars Reconnaissance Orbiter (MRO) още преди кацането на апарата. Тези отлагания са от различни соли (магнезиев и калциев сулфат, натриев хлорид) и са индикация за миналото на Марс, когато по повърхността му е имало добре развита хидросфера с големи региони, покрити от вода.

С пробивния инструмент на Curiosity учените успешно са взели проба от камък, наречен Canaima. Предстои пробата да бъде изследвана с два от аналитичните уреди на борда на апарата – рентгеновия дифрактометър CheMin, използван за определянето на минералния състав, и спектрометъра SAM. Резултатите от анализа може да дадат информация дали въглеродният диоксид и метанът са от геологичен, или биологичен произход, и така да помогнат в търсенето на следи от живот на планетата.

Смята се, че регионът, в който се намира Curiosity, някога е бил голям океан. С помощта на топографска информация, получена от MRO, и подходите на стратиграфията – наука, която изучава отлагането на седименти – са намерени редица доказателства, подкрепящи тази хипотеза. Учените са разгледали над 6500 километра от флувиални натрупвания (предизвикани от движението на вода), които според тях представляват ерозирали корита на реки и делти, очертаващи океански бряг. Седиментният слой е дебел поне 900 метра, което е показател за бързо покачване на водното ниво, причинено от продължителен топъл и влажен климат. Бреговете на водоемите, в които се вливат реки, са едни от най-вероятните места за развитие на живот, тъй като водните потоци могат да бъдат източници на хранителни вещества.

Заглавна снимка: Микроскопска снимка на ДНК © Sangharsh Lohakare / Unsplash

Източник

На второ четене: „Момчетата от „Никел“

Post Syndicated from Севда Семер original https://toest.bg/na-vtoro-chetene-momchetata-ot-nickel/

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

„Момчетата от Никел“ от Колсън Уайтхед

превод от английски Александър Маринов, изд. „Лист“, 2021

Възможно е да се спечели „Пулицър“ повече от веднъж. (Не е като френската награда „Гонкур“, която се присъжда само еднократно на автор, заради което Ромен Гари си измисли псевдоним, за да я вземе повторно.) Просто в историята на „Пулицър“ подобни случаи не са често срещано явление, особено ако говорим за награждаване в една и съща категория. Сред малкото автори, отличени повече от веднъж за свои романи, е американският писател Колсън Уайтхед.

Уайтхед получава първия си „Пулицър“ през 2017 г. за романа „Подземната железница“ заради „интелигентното смесване на реализъм и алегория и съчетаване на насилието на робството и драмата на бягството в един мит, който говори на съвременната Америка“. Думите са на комитета за наградите и ги цитирам, защото Уайтхед умее да говори за миналото, докато казва неща и за настоящето.

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

„Момчетата от Никел“ е книга, която е, меко казано, просмукана от дълбок мрак. Базира се на истинската история на поправителното училище за момчета „Дозиър“ във Флорида, функционирало 111 години въпреки ужасяващото насилие на надзирателите над децата, влезли там заради дребни провинения. При това са известни около сто убийства на малолетни (поне за толкова има доказателства). От тях чернокожите момчета са три пъти повече от белите.

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

Не е лесно да подхванеш подобна тема и да я разработиш, без да излезе, че я експлоатираш. Без да ставаш поредният, който се възползва от момчетата за собствени дивиденти. Затова и авторът още от първата страница разказва за убийствата в училището („Дори мъртви, момчетата създаваха неприятности“). Както още от началото ни става ясно, главният герой Елуд някак ще се озове накрая в поправителното училище. Няма да го спаси нито любознанието му, нито пламенните му идеи за равенство в съзвучие с речите на Мартин Лутър Кинг, които често слуша в дома на баба си. Опознаваме това чудесно дете, става ни симпатично, докато чакаме неизбежното – някъде нещо ще се обърка. Елуд ще стане жертва на системата, защото няма как сам да извърши дори дребно престъпление.

Той иска да преследва амбицията си – да стигне до колеж, за което му помага негов преподавател. Тръгва на стоп, но полицаи спират колата, която се оказва крадена от човека зад волана. Какво значение има, че дори крадецът признава, че не е срещал момчето преди? Кой ще слуша обясненията им? И така вместо в колежа Елуд се озовава в „Никел“, където часовете са посветени на едва сричащите му съученици. Но кой ти гледа академичния прогрес, когато въпросът буквално е дали ще излезеш жив от това място. Тук законите се пишат в Белия дом – бараката, в която водят момчетата посред нощ за удари с камшик заради всякакъв вид провинения.

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

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

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

Дори само с това – смелостта да се разказва директно, но и с уважение – тази история е достатъчно добра. На ужасното насилие обаче реагираме с ръка пред устата, застинали в шок. Това, което ни разплаква, е надеждата. Именно тя превръща „Момчетата от Никел“ от добър роман в изключителен. Няколко умни обрата, изковани внимателно и с въображение, се появяват точно когато си мислиш, че ти е ясно за какво е тази книга и какво ти казва. Авторът обръща плочата и се оказва, че от другата страна през цялото време е било записано нещо друго.

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

От истината тук има достатъчно, за да стане историята важна; от въображението на Уайтхед има толкова, че да стане тя напълно нова. Така неочаквано се превръща в съд, направен от болка, но преливащ от надежда.

Заглавно изображение: Колаж от корицата на книгата (худ. Костадин Кокаланов, изд. „Лист“) и снимка на Zia King / Unsplash
Активните дарители на „Тоест“ получават постоянна отстъпка в размер на 20% от коричната цена на всички заглавия от каталога на „Лист“, както и на няколко други български издателства в рамките на партньорската програма Читателски клуб „Тоест“. За повече информация прочетете на toest.bg/club.

Източник

Metasploit Weekly Wrap-Up

Post Syndicated from Alan David Foster original https://blog.rapid7.com/2022/11/11/metasploit-weekly-wrap-up-183/

ADCS – ESC Vulnerable certificate template finder

Metasploit Weekly Wrap-Up

Our very own Grant Willcox has developed a new module which allows users to query a LDAP server for vulnerable Active Directory Certificate Services (AD CS) certificate templates. The module will print the detected certificate details, and the attack it is susceptible to. This module is capable of checking for ESC1, ESC2, and ESC3 vulnerable certificates.

Example module output showing an identified vulnerable certificate template:

msf6 auxiliary(gather/ldap_esc_vulnerable_cert_finder) > run
[*] Running module against 172.26.104.157
[*] Discovering base DN automatically
[+] 172.26.104.157:389 Discovered base DN: DC=daforest,DC=com
[*] Template: SubCA
[*]    Distinguished Name: CN=SubCA,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=daforest,DC=com
[*]    Vulnerable to: ESC1, ESC2, ESC3_TEMPLATE_2
[*]    Certificate Template Enrollment SIDs:
[*]       * S-1-5-21-3290009963-1772292745-3260174523-512 (Domain Admins)
[*]       * S-1-5-21-3290009963-1772292745-3260174523-519 (Enterprise Admins)
[*]    Issuing CAs:
[*]       * daforest-WIN-BR0CCBA815B-CA
[*]          Server: WIN-BR0CCBA815B.daforest.com
[*]          Enrollment SIDs:
[*]             * S-1-5-11 (Authenticated Users)
… etc etc …

SSL Scanner improvements

Community member h00die has made improvements to a new Metasploit’s SSL scanner modules, and combined the functionality of two existing modules auxiliary/scanner/http/ssl.rb auxiliary/scanner/http/ssl_version.rb into one new module auxiliary/scanner/ssl/ssl_version.rb. This new module has added checks for Deprecated protocols, expired/not valid certs, low key strength, Null cipher suites, certificates signed with MD5, DROWN, RC4 ciphers, exportable ciphers, LOGJAM, and BEAST.

Reduced Python payload sizes

Community member llamasoft has recently contributed improvements to our Python payloads, with the first change being a modification to the Python Meterpreter stage to calculate the necessary data for AES encryption at runtime – which helped reduce the stage size by about 6,000 bytes. This week’s Metasploit release includes compression support using zlib. This change reduces the size of the Python Meterpreter from 95kb to 24kb.

New module content (4)

  • Misconfigured Certificate Template Finder by Grant Willcox – This adds a module that analyzes certificate templates to identify ones that are vulnerable to ESC1, ESC2 and ESC3. When a template is found to be vulnerable, the necessary information is printed for the user including the template name, the issuing CAs and the SIDs of the users that are able to issue them.
  • SSL/TLS Version Detection by todb, Chris John Riley, Veit Hailperin, et, and h00die, which detects CVE-2022-3358 – A new module modules/auxiliary/scanner/ssl/ssl_version.rb has been released which replaces the old SSL scanners and offers improved features such as SSL cipher suite checking, improvements to CA Issuers logic, support for expired certs and depreciated protocols, and better error handling.
  • Reverse Lookup IP Addresses by mubix and bcoles – Adds a new post/multi/recon/reverse_lookup module that reverse resolves an IP address or IP address range to hostnames. The old post/windows/gather/reverse_lookup and post/windows/recon/resolve_ip modules have been removed.
  • Windows Gather Navicat Passwords by HyperSine and Kali-Team – This adds a post module that retrieves and decrypts passwords saved by Navicat.

Enhancements and features (6)

  • #17211 from llamasoft – This compresses Python payloads using zlib to make them smaller.
  • #17219 from jheysel-r7 – Update Zabbix login_scanner to work with version 6.2.4.
  • #17223 from cgranleese-r7 – The reload_lib functionality has been updated so that its file change tracking logic better takes into account scenarios where files are modified. Previously if a breakpoint was inserted, removed, and then reload_lib -a was run, it would mistakenly use an old copy of the code.
  • #17234 from cgranleese-r7 – Add references to info -d command in the options and info command outputs. This command allows you to generate a HTML document which you can use to view the full documentation of a module in your browser.
  • #17235 from jmartin-r7 – Updates auxiliary/scanner/http/manageengine_desktop_central_login module to report the service name correctly as http or https.
  • #17238 from zeroSteiner and NtAlexio2 – Adds the shutdown command to Window’s Python Meterpreter.

Bugs fixed (3)

  • #17177 from nzdjb – A bug has been fixed when searching for or attempting to use modules whereby trailing :‘s were not handled appropriately as part of the input, and could lead to all modules in Metasploit being returned.
  • #17221 from adfoster-r7 -A bug has been fixed that would cause crashes when generating payload sizes. Additionally, the code has been updated to ignore payload metadata for adaptor payloads when determining payload sizes.
  • #17244 from zeroSteiner – A bug that could cause the hostname command to fail in Mettle versions of Meterpreter has been improved by adding increased validation to the hostname code.
  • #17220 from adfoster-r7 – This fixes a crash in the peinject stage that would occur when the PE datastore option was not set.

Get it

As always, you can update to the latest Metasploit Framework with msfupdate
and you can get more details on the changes since the last blog post from
GitHub:

If you are a git user, you can clone the Metasploit Framework repo (master branch) for the latest.
To install fresh without using git, you can use the open-source-only Nightly Installers or the
binary installers (which also include the commercial edition).

The collective thoughts of the interwebz