Making Time for Cron Triggers: A Look Inside

Post Syndicated from Aaron Lisman original https://blog.cloudflare.com/cron-triggers-for-scheduled-workers/

Making Time for Cron Triggers: A Look Inside

Making Time for Cron Triggers: A Look Inside

Today, we are excited to launch Cron Triggers to the Cloudflare Workers serverless compute platform. We’ve heard the developer feedback, and we want to give our users the ability to run a given Worker on a scheduled basis. In case you’re not familiar with Unix systems, the cron pattern allows developers to schedule jobs to run at fixed intervals. This pattern is ideal for running any types of periodic jobs like maintenance or calling third party APIs to get up-to-date data. Cron Triggers has been a highly requested feature even inside Cloudflare and we hope that you will find this feature as useful as we have!

Making Time for Cron Triggers: A Look Inside

Where are Cron Triggers going to be run?

Cron Triggers are executed from the edge. At Cloudflare, we believe strongly in edge computing and wanted our new feature to get all of the performance and reliability benefits of running on our edge. Thus, we wrote a service in core that is responsible for distributing schedules to a new edge service through Quicksilver which will then trigger the Workers themselves.

What’s happening under the hood?

At a high level, schedules created through our API create records in our database with the information necessary to execute the Worker and the given cron schedule. These records are then picked up by another service which continuously evaluates the state of our edge and distributes the schedules between cities.

Once the schedules have been distributed to the edge, a service running in the edge node polls for changes to the schedules and makes sure they get sent to our runtime at the appropriate time.

New Event Type

Making Time for Cron Triggers: A Look Inside

Cron Triggers gave us the opportunity to finally recognize a new Worker ‘type’ in our API. While Workers currently only run on web requests, we have lots of ideas for the future of edge computing that aren’t strictly tied to HTTP requests and responses. Expect to see even more new handlers in the future for other non-HTTP events like log information from your Worker (think custom wrangler tail!) or even TCP Workers.

Here’s an example of the new Javascript API:

addEventListener('scheduled', event => {
  event.waitUntil(someAsyncFunction(event))
})

Where event has the following interface in Typescript:

interface ScheduledEvent {
  type: 'scheduled';
  scheduledTime: int; // milliseconds since the Unix epoch
}

As long as your Worker has a handler for this new event type, you’ll be able to give it a schedule.

New APIs

PUT /client/v4/accounts/:account_identifier/workers/scripts/:name

The script upload API remains the same, but during script validation we now detect and return the registered event handlers.

PUT /client/v4/accounts/:account_identifier/workers/scripts/:name/schedules
Body

[
 {"cron": "* * * * *"},
 ...
]

This will create or modify all schedules for a script, removing all schedules not in the list. For now, there’s a limit of 3 distinct cron schedules. Schedules can be set to run as often as one minute and don’t accept schedules with years in them (sorry, you’ll have to run your Y3K migration script another way).

GET /client/v4/accounts/:account_identifier/workers/scripts/:name/schedules
Response

{
 "schedules": [
   {
     "cron": "* * * * *",
      "created_on": <time>,
      "modified_on": <time>
   },
   ...
 ]
}

The Scheduler service is responsible for reading the schedules from Postgres and generating per-node schedules to place into Quicksilver. For now, the service simply avoids trying to execute your Worker on an edge node that may be disabled for some reason, but such an approach also gives us a lot of flexibility in deciding where your Worker executes.

In addition to edge node availability, we could optimize for compute cost, bandwidth, or even latency in the future!

What’s actually executing these schedules?

To consume the schedules and actually trigger the Worker, we built a new service in Rust and deployed to our edge using HashiCorp Nomad. Nomad ensures that the schedule runner remains running in the edge node and can move it between machines as necessary. Rust was the best choice for this service since it needed to be fast with high availability and Cap’n Proto RPC support for calling into the runtime. With Tokio, Anyhow, Clap, and Serde, it was easy to quickly get the service up and running without having to really worry about async, error handling, or configuration.

On top of that, due to our specific needs for cron parsing, we built a specialized cron parser using nom that allowed us to quickly parse and compile expressions into values that check against a given time to determine if we should run a schedule.

Once the schedule runner has the schedules, it checks the time and selects the Workers that need to be run. To let the runtime know it’s time to run, we send a Cap’n Proto RPC message. The runtime then does its thing, calling the new ‘scheduled’ event handler instead of ‘fetch’.

How can I try this?

As of today, the Cron Triggers feature is live! Please try it out by creating a Worker and finding the Triggers tab – we’re excited to see what you build with it!

Workers Durable Objects Beta: A New Approach to Stateful Serverless

Post Syndicated from Kenton Varda original https://blog.cloudflare.com/introducing-workers-durable-objects/

Workers Durable Objects Beta:
A New Approach to Stateful Serverless

Workers Durable Objects Beta:
A New Approach to Stateful Serverless

We launched Cloudflare Workers® in 2017 with a radical vision: code running at the network edge could not only improve performance, but also be easier to deploy and cheaper to run than code running in a single datacenter. That vision means Workers is about more than just edge compute — we’re rethinking how applications are built.

Using a “serverless” approach has allowed us to make deploys dead simple, and using isolate technology has allowed us to deliver serverless more cheaply and without the lengthy cold starts that hold back other providers. We added easy-to-use eventually-consistent edge storage to the platform with Workers KV.

But up until today, it hasn’t been possible to manage state with strong consistency, or to coordinate in real time between multiple clients, entirely on the edge. Thus, these parts of your application still had to be hosted elsewhere.

Durable Objects provide a truly serverless approach to storage and state: consistent, low-latency, distributed, yet effortless to maintain and scale. They also provide an easy way to coordinate between clients, whether it be users in a particular chat room, editors of a particular document, or IoT devices in a particular smart home. Durable Objects are the missing piece in the Workers stack that makes it possible for whole applications to run entirely on the edge, with no centralized “origin” server at all.

Today we are beginning a closed beta of Durable Objects.

Request a beta invite »

What is a “Durable Object”?

I’m going to be honest: naming this product was hard, because it’s not quite like any other cloud technology that is widely-used today. This proverbial bike shed has many layers of paint, but ultimately we settled on “Unique Durable Objects”, or “Durable Objects” for short. Let me explain what they are by breaking that down:

  • Objects: Durable Objects are objects in the sense of Object-Oriented Programming. A Durable Object is an instance of a class — literally, a class definition written in JavaScript (or your language of choice). The class has methods which define its public interface. An object is an instance of this class, combining the code with some private state.
  • Unique: Each object has a globally-unique identifier. That object exists in only one location in the whole world at a time. Any Worker running anywhere in the world that knows the object’s ID can send messages to it. All those messages end up delivered to the same place.
  • Durable: Unlike a normal object in JavaScript, Durable Objects can have persistent state stored on disk. Each object’s durable state is private to it, which means not only that access to storage is fast, but the object can even safely maintain a consistent copy of the state in memory and operate on it with zero latency. The in-memory object will be shut down when idle and recreated later on-demand.

What can they do?

Durable Objects have two primary abilities:

  • Storage: Each object has attached durable storage. Because this storage is private to a specific object, the storage is always co-located with the object. This means the storage can be very fast while providing strong, transactional consistency. Durable Objects apply the serverless philosophy to storage, splitting the traditional large monolithic databases up into many small, logical units. In doing so, we get the advantages you’ve come to expect from serverless: effortless scaling with zero maintenance burden.
  • Coordination: Historically, with Workers, each request would be randomly load-balanced to a Worker instance. Since there was no way to control which instance received a request, there was no way to force two clients to talk to the same Worker, and therefore no way for clients to coordinate through Workers. Durable Objects change that: requests related to the same topic can be forwarded to the same object, which can then coordinate between them, without any need to touch storage. For example, this can be used to facilitate real-time chat, collaborative editing, video conferencing, pub/sub message queues, game sessions, and much more.

The astute reader may notice that many coordination use cases call for WebSockets — and indeed, conversely, most WebSocket use cases require coordination. Because of this complementary relationship, along with the Durable Objects beta, we’ve also added WebSocket support to Workers. For more on this, see the Q&A below.

Region: Earth

Workers Durable Objects Beta:
A New Approach to Stateful Serverless

When using Durable Objects, Cloudflare automatically determines the Cloudflare datacenter that each object will live in, and can transparently migrate objects between locations as needed.

Traditional databases and stateful infrastructure usually require you to think about geographical “regions”, so that you can be sure to store data close to where it is used. Thinking about regions can often be an unnatural burden, especially for applications that are not inherently geographical.

With Durable Objects, you instead design your storage model to match your application’s logical data model. For example, a document editor would have an object for each document, while a chat app would have an object for each chat. There is no problem creating millions or billions of objects, as each object has minimal overhead.

Killer app: Real-time collaborative document editing

Let’s say you have a spreadsheet editor application — or, really, any kind of app where users edit a complex document. It works great for one user, but now you want multiple users to be able to edit it at the same time. How do you accomplish this?

For the standard web application stack, this is a hard problem. Traditional databases simply aren’t designed to be real-time. When Alice and Bob are editing the same spreadsheet, you want every one of Alice’s keystrokes to appear immediately on Bob’s screen, and vice versa. But if you merely store the keystrokes to a database, and have the users repeatedly poll the database for new updates, at best your application will have poor latency, and at worst you may find database transactions repeatedly fail as users on opposite sides of the world fight over editing the same content.

The secret to solving this problem is to have a live coordination point. Alice and Bob connect to the same coordinator, typically using WebSockets. The coordinator then forwards Alice’s keystrokes to Bob and Bob’s keystrokes to Alice, without having to go through a storage layer. When Alice and Bob edit the same content at the same time, the coordinator resolves conflicts instantly. The coordinator can then take responsibility for updating the document in storage — but because the coordinator keeps a live copy of the document in-memory, writing back to storage can happen asynchronously.

Every big-name real-time collaborative document editor works this way. But for many web developers, especially those building on serverless infrastructure, this kind of solution has long been out-of-reach. Standard serverless infrastructure — and even cloud infrastructure more generally — just does not make it easy to assign these coordination points and direct users to talk to the same instance of your server.

Durable Objects make this easy. Not only do they make it easy to assign a coordination point, but Cloudflare will automatically create the coordinator close to the users using it and migrate it as needed, minimizing latency. The availability of local, durable storage means that changes to the document can be saved reliably in an instant, even if the eventual long-term storage is slower. Or, you can even store the entire document on the edge and abandon your database altogether.

With Durable Objects lowering the barrier, we hope to see real-time collaboration become the norm across the web. There’s no longer any reason to make users refresh for updates.

Example: An atomic counter

Here’s a very simple example of a Durable Object which can be incremented, decremented, and read over HTTP. This counter is consistent even when receiving simultaneous requests from multiple clients — none of the increments or decrements will be lost. At the same time, reads are served entirely from memory, no disk access needed.

export class Counter {
  // Constructor called by the system when the object is needed to
  // handle requests.
  constructor(controller, env) {
    // `controller.storage` is an interface to access the object's
    // on-disk durable storage.
    this.storage = controller.storage
  }

  // Private helper method called from fetch(), below.
  async initialize() {
    let stored = await this.storage.get("value");
    this.value = stored || 0;
  }

  // Handle HTTP requests from clients.
  //
  // The system calls this method when an HTTP request is sent to
  // the object. Note that these requests strictly come from other
  // parts of your Worker, not from the public internet.
  async fetch(request) {
    // Make sure we're fully initialized from storage.
    if (!this.initializePromise) {
      this.initializePromise = this.initialize();
    }
    await this.initializePromise;

    // Apply requested action.
    let url = new URL(request.url);
    switch (url.pathname) {
      case "/increment":
        ++this.value;
        await this.storage.put("value", this.value);
        break;
      case "/decrement":
        --this.value;
        await this.storage.put("value", this.value);
        break;
      case "/":
        // Just serve the current value. No storage calls needed!
        break;
      default:
        return new Response("Not found", {status: 404});
    }

    // Return current value.
    return new Response(this.value);
  }
}

Once the class has been bound to a Durable Object namespace, a particular instance of Counter can be accessed from anywhere in the world using code like:

// Derive the ID for the counter object named "my-counter".
// This name is associated with exactly one instance in the
// whole world.
let id = COUNTER_NAMESPACE.idFromName("my-counter");

// Send a request to it.
let response = await COUNTER_NAMESPACE.get(id).fetch(request);

Demo: Chat

Chat is arguably real-time collaboration in its purest form. And to that end, we have built a demo open source chat app that runs entirely at the edge using Durable Objects.

Try the live demo »See the source code on GitHub »

This chat app uses a Durable Object to control each chat room. Users connect to the object using WebSockets. Messages from one user are broadcast to all the other users. The chat history is also stored in durable storage, but this is only for history. Real-time messages are relayed directly from one user to others without going through the storage layer.

Additionally, this demo uses Durable Objects for a second purpose: Applying a rate limit to messages from any particular IP. Each IP is assigned a Durable Object that tracks recent request frequency, so that users who send too many messages can be temporarily blocked — even across multiple chat rooms. Interestingly, these objects don’t actually store any durable state at all, because they only care about very recent history, and it’s not a big deal if a rate limiter randomly resets on occasion. So, these rate limiter objects are an example of a pure coordination object with no storage.

This chat app is only a few hundred lines of code. The deployment configuration is only a few lines. Yet, it will scale seamlessly to any number of chat rooms, limited only by Cloudflare’s available resources. Of course, any individual chat room’s scalability has a limit, since each object is single-threaded. But, that limit is far beyond what a human participant could keep up with anyway.

Other use cases

Durable Objects have infinite uses. Here are just a few ideas, beyond the ones described above:

  • Shopping cart: An online storefront could track a user’s shopping cart in an object. The rest of the storefront could be served as a fully static web site. Cloudflare will automatically host the cart object close to the end user, minimizing latency.
  • Game server: A multiplayer game could track the state of a match in an object, hosted on the edge close to the players.
  • IoT coordination: Devices within a family’s house could coordinate through an object, avoiding the need to talk to distant servers.
  • Social feeds: Each user could have a Durable Object that aggregates their subscriptions.
  • Comment/chat widgets: A web site that is otherwise static content can add a comment widget or even a live chat widget on individual articles. Each article would use a separate Durable Object to coordinate. This way the origin server can focus on static content only.

The Future: True Edge Databases

We see Durable Objects as a low-level primitive for building distributed systems. Some applications, like those mentioned above, can use objects directly to implement a coordination layer, or maybe even as their sole storage layer.

However, Durable Objects today are not a complete database solution. Each object can see only its own data. To perform a query or transaction across multiple objects, the application needs to do some extra work.

That said, every big distributed database – whether it be relational, document, graph, etc. – is, at some low level, composed of “chunks” or “shards” that store one piece of the overall data. The job of a distributed database is to coordinate between chunks.

We see a future of edge databases that store each “chunk” as a Durable Object. By doing so, it will be possible to build databases that operate entirely at the edge, fully distributed with no regions or home location. These databases need not be built by us; anyone can potentially build them on top of Durable Objects. Durable Objects are only the first step in the edge storage journey.

Join the Beta

Storing data is a big responsibility which we do not take lightly. Because of the critical importance of getting it right, we are being careful. We will be making Durable Objects available gradually over the next several months.

As with any beta, this product is a work in progress, and some of what is described in this post is not fully enabled yet. Full details of beta limitations can be found in the documentation.

If you’d like to try out Durable Objects now, tell us about your use case. We’ll be selecting the most interesting use cases for early access.

Request a beta invite »

Q&A

Can Durable Objects serve WebSockets?

Yes.

As part of the Durable Objects beta, we’ve made it possible for Workers to act as WebSocket endpoints — including as a client or as a server. Before now, Workers could proxy WebSocket connections on to a back-end server, but could not speak the protocol directly.

While technically any Worker can speak WebSocket in this way, WebSockets are most useful when combined with Durable Objects. When a client connects to your application using a WebSocket, you need a way for server-generated events to be sent back to the existing socket connection. Without Durable Objects, there’s no way to send an event to the specific Worker holding a WebSocket. With Durable Objects, you can now forward the WebSocket to an Object. Messages can then be addressed to that Object by its unique ID, and the Object can then forward those messages down the WebSocket to the client.

The chat app demo presented above uses WebSockets. Check out the source code to see how it works.

How does this compare to Workers KV?

Two years ago, we introduced Workers KV, a global key-value data store. KV is a fairly minimalist global data store that serves certain purposes well, but is not for everyone. KV is eventually consistent, which means that writes made in one location may not be visible in other locations immediately. Moreover, it implements “last write wins” semantics, which means that if a single key is being modified from multiple locations in the world at once, it’s easy for those writes to overwrite each other. KV is designed this way to support low-latency reads for data that doesn’t frequently change. However, these design decisions make KV inappropriate for state that changes frequently, or when changes need to be immediately visible worldwide.

Durable Objects, in contrast, are not primarily a storage product at all — many use cases for them do not actually utilize durable storage. To the extent that they do provide storage, Durable Objects sit at the opposite end of the storage spectrum from KV. They are extremely well-suited to workloads requiring transactional guarantees and immediate consistency. However, since transactions inherently must be coordinated in a single location, and clients on the opposite side of the world from that location will experience moderate latency due to the inherent limitations of the speed of light. Durable Objects will combat this problem by auto-migrating to live close to where they are used.

In short, Workers KV remains the best way to serve static content, configuration, and other rarely-changing data around the world, while Durable Objects are better for managing dynamic state and coordination.

Going forward, we plan to utilize Durable Objects in the implementation of Workers KV itself, in order to deliver even better performance.

Why not use CRDTs?

You can build CRDT-based storage on top of Durable Objects, but Durable Objects do not require you to use CRDTs.

Conflict-free Replicated Data Types (CRDTs), or their cousins, Operational Transforms (OTs), are a technology that allows data to be edited from multiple places in the world simultaneously without synchronization, and without data loss. For example, these technologies are commonly used in the implementation of real-time collaborative document editors, so that a user’s keypresses can show up in their local copy of the document in real time, without waiting to see if anyone else edited another part of the document first. Without getting into details, you can think of these techniques like a real time version of “git fork” and “git merge”, where all merge conflicts are resolved automatically in a deterministic way, so that everyone ends up with the same state in the end.

CRDTs are a powerful technology, but applying them correctly can be challenging. Only certain kinds of data structures lend themselves to automatic conflict resolution in a way that doesn’t lead to easy data loss. Any developer familiar with git can see the problem: arbitrary conflict resolution is hard, and any automated algorithm for it will likely get things wrong sometimes. It’s all the more difficult if the algorithm has to handle merges in arbitrary order and still get the same answer.

We feel that, for most applications, CRDTs are overly complex and not worth the effort. Worse, the set of data structures that can be represented as a CRDT is too limited for many applications. It’s usually much easier to assign a single authoritative coordination point for each document, which is exactly what Durable Objects accomplish.

With that said, CRDTs can be used on top of Durable Objects. If an object’s state lends itself to CRDT treatment, then an application could replicate that object into several objects serving different regions, which then synchronize their states via CRDT. This would make sense for applications to implement as an optimization if and when they find it is worth the effort.

Last thoughts: What does it mean for state to be “serverless”?

Traditionally, serverless has focused on stateless compute. In serverless architectures, the logical unit of compute is reduced to something fine-grained: a single event, such as an HTTP request. This works especially well because events just happened to be the logical unit of work that we think about when designing server applications. No one thinks about their business logic in units of “servers” or “containers” or “processes” — we think about events. It is exactly because of this semantic alignment that serverless succeeds in shifting so much of the logistical burden of maintaining servers away from the developer and towards the cloud provider.

However, serverless architecture has traditionally been stateless. Each event executes in isolation. If you wanted to store data, you had to connect to a traditional database. If you wanted to coordinate between requests, you had to connect to some other service that provides that ability. These external services have tended to re-introduce the operational concerns that serverless was intended to avoid. Developers and service operators have to worry not just about scaling their databases to handle increasing load, but also about how to split their database into “regions” to effectively handle global traffic. The latter concern can be especially cumbersome.

So how can we apply the serverless philosophy to state? Just like serverless compute is about splitting compute into fine-grained pieces, serverless state is about splitting state into fine-grained pieces. Again, we seek to find a unit of state that corresponds to logical units in our application. The logical unit of state in an application is not a “table” or a “collection” or a “graph”. Instead, it depends on the application. The logical unit of state in a chat app is a chat room. The logical unit of state in an online spreadsheet editor is a spreadsheet. The logical unit of state in an online storefront is a shopping cart. By making the physical unit of storage provided by the storage layer match the logical unit of state inherent in the application, we can allow the underlying storage provider (Cloudflare) to take responsibility for a wide array of logistical concerns that previously fell on the developer, including scalability and regionality.

This is what Durable Objects do.

On Executive Order 12333

Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2020/09/on-executive-order-12333.html

Mark Jaycox has written a long article on the US Executive Order 12333: “No Oversight, No Limits, No Worries: A Primer on Presidential Spying and Executive Order 12,333“:

Abstract: Executive Order 12,333 (“EO 12333”) is a 1980s Executive Order signed by President Ronald Reagan that, among other things, establishes an overarching policy framework for the Executive Branch’s spying powers. Although electronic surveillance programs authorized by EO 12333 generally target foreign intelligence from foreign targets, its permissive targeting standards allow for the substantial collection of Americans’ communications containing little to no foreign intelligence value. This fact alone necessitates closer inspection.

This working draft conducts such an inspection by collecting and coalescing the various declassifications, disclosures, legislative investigations, and news reports concerning EO 12333 electronic surveillance programs in order to provide a better understanding of how the Executive Branch implements the order and the surveillance programs it authorizes. The Article pays particular attention to EO 12333’s designation of the National Security Agency as primarily responsible for conducting signals intelligence, which includes the installation of malware, the analysis of internet traffic traversing the telecommunications backbone, the hacking of U.S.-based companies like Yahoo and Google, and the analysis of Americans’ communications, contact lists, text messages, geolocation data, and other information.

After exploring the electronic surveillance programs authorized by EO 12333, this Article proposes reforms to the existing policy framework, including narrowing the aperture of authorized surveillance, increasing privacy standards for the retention of data, and requiring greater transparency and accountability.

ElasticSearch Multitenancy With Routing

Post Syndicated from Bozho original https://techblog.bozho.net/elasticsearch-multitenancy-with-routing/

Elasticsearch is great, but optimizing it for high load is always tricky. This won’t be yet another “Tips and tricks for optimizing Elasticsearch” article – there are many great ones out there. I’m going to focus on one narrow use-case – multitenant systems, i.e. those that support multiple customers/users (tenants).

You can build a multitenant search engine in three different ways:

  • Cluster per tenant – this is the hardest to manage and requires a lot of devops automation. Depending on the types of customers it may be worth it to completely isolate them, but that’s rarely the case
  • Index per tenant – this can be fine initially, and requires little additional coding (you just parameterize the “index” parameter in the URL of the queries), but it’s likely to cause problems as the customer base grows. Also, supporting consistent mappings and settings across indexes may be trickier than it sounds (e.g. some may reject an update and others may not depending on what’s indexed). Moving data to colder indexes also becomes more complex.
  • Tenant-based routing – this means you put everything in one cluster but you configure your search routing to be tenant-specific, which allows you to logically isolate data within a single index.

The last one seems to be the preferred option in general. What is routing? The Elasticsearch blog has a good overview and documentation. The idea lies in the way Elasticsearch handles indexing and searching – it splits data into shards (each shard is a separate Lucene index and can be replicated on more than one node). A shard is a logical grouping within a single Elasticsearch node. When no custom routing is used, and an index request comes, the ID is used to determine which shard is going to be used to store the data. However, during search, Elasticsearch doesn’t know which shards have the data, so it has ask multiple shards and gather the results. Related to that, there’s the newly introduced adaptive replica selection, where the proper shard replica is selected intelligently, rather than using round-robin.

Custom routing allows you to specify a routing value when indexing a document and then a search can be directed only to the shard that has the same routing value. For example, at LogSentinel when we index a log entry, we use the data source id (applicationId) for routing. So each application (data source) that generates logs has a separate identifier which allows us to query only that data source’s shard. That way, even though we may have a thousand clients with a hundred data sources each, a query will be precisely targeted to where the data for that particular customer’s data source lies.

This is key for horizontally scaling multitenant applications. When there’s terabytes of data and billions of documents, many shards will be needed (in order to avoid large and heavy shards that cause performance issues). Finding data in this haystack requires the ability to know where to look.

Note that you can (and probably should) make routing required in these cases – each indexed document must be required to have a routing key, otherwise an implementation oversight may lead to a slow index.

Using custom routing you are practically turning one large Elasticsearch cluster into smaller sections, logically separated based on meaningful identifiers. In our case, it is not a userId/customerId, but one level deeper – there are multiple shards per customer, but depending on the use-case, it can be one shard per customer, using the userId/customerId. Using more than one shard per customer may complicate things a little – for example having too many shards per customer may require searches that span too many shards, but that’s not necessarily worse than not using routing.

There are some caveats – the isolation of customer data has to be handled in the application layer (whereas for the first two approaches data is segregated operationally). If there’s an application bug or lack of proper access checks, one user can query data from other users’ shards by specifying their routing key. It’s the role of the application in front of Elasticsearch to only allow queries with routing keys belonging to the currently authenticated user.

There are cases when the first two approaches to multitenancy are viable (e.g. a few very large customers), but in general the routing approach is the most scalable one.

The post ElasticSearch Multitenancy With Routing appeared first on Bozho's tech blog.

Raspberry Pi High Quality Camera takes photos through thousands of straws

Post Syndicated from Ashley Whittaker original https://www.raspberrypi.org/blog/raspberry-pi-high-quality-camera-takes-photos-through-thousands-of-straws/

Adrian Hanft is our favourite kind of maker: weird. He’s also the guy who invented the Lego camera, 16 years ago. This time, he spent more than a year creating what he describes as “one of the strangest cameras you may ever hear about.”

What? Looks normal from here. Massive, but normal

What’s with all the straws?

OK, here’s why it’s weird: it takes photos with a Raspberry Pi High Quality Camera through a ‘lens’ of tiny drinking straws packed together. 23,248 straws, to be exact, are inside the wooden box-shaped bit of the machine above. The camera itself sits at the slim end of the black and white part. The Raspberry Pi, power bank, and controller all sit on top of the wooden box full of straws.

Here’s what an image of Yoda looks like, photographed through that many straws:

Mosaic, but make it techy

Ground glass lenses

The concept isn’t as easy as it may look. As you can see from the images below, if you hold up a load of straws, you can only see the light through a few of them. Adrian turned to older technology for a solution, taking a viewfinder from an old camera which had ground glass (which ‘collects’ light) on the surface.

Left: looking through straws at light with the naked eye
Right: the same straws viewed through a ground glass lens

Even though Adrian was completely new to both Raspberry Pi and Python, it only took him a week of evenings and weekends to code the software needed to control the Raspberry Pi High Quality Camera.

Long story short, on the left is the final camera, with all the prototypes queued up behind it

An original Nintendo controller runs the show and connects to the Raspberry Pi with a USB adapter. The buttons are mapped to the functions of Adrian’s software.

A super satisfying time-lapse of the straws being loaded

What does the Nintendo controller do?

In his original post, Adrian explains what all the buttons on the controller do in order to create images:

“The Start button launches a preview of what the camera is seeing. The A button takes a picture. The Up and Down buttons increase or decrease the exposure time by 1 second. The Select button launches a gallery of photos so I can see the last photo I took. The Right and Left buttons cycle between photos in the gallery. I am saving the B button for something else in the future. Maybe I will use it for uploading to Dropbox, I haven’t decided yet.”

Adrian made a Lego mount for the Raspberry Pi camera
The Lego mount makes it easy to switch between cameras and lenses

A mobile phone serves as a wireless display so he can keep an eye on what’s going on. The phone communicates with the Raspberry Pi connected to the camera via a VPN app.

One of the prototypes in action

Follow Adrian on Instagram to keep up with all the photography captured using the final camera, as well as the prototypes that came before it.

The post Raspberry Pi High Quality Camera takes photos through thousands of straws appeared first on Raspberry Pi.

Kernel prepatch 5.9-rc7

Post Syndicated from original https://lwn.net/Articles/832734/rss

The 5.9-rc7 kernel prepatch is out for
testing. “But while I do now know of any remaining gating issues any more, the
fixes came in fairly late. So unless I feel insanely optimistic and/or
a burning bush tells me that everything is bug-free, my plan right now
is that I’ll do another rc next Sunday rather than the final 5.9
release. And btw, please no more burning bushes. We’re kind of
sensitive about those on the West coast right now.

A letter from Cloudflare’s founders (2020)

Post Syndicated from Matthew Prince original https://blog.cloudflare.com/a-letter-from-cloudflares-founders-2020/

A letter from Cloudflare’s founders (2020)

To our stakeholders:

Cloudflare launched on September 27, 2010 — 10 years ago today. Stopping to look back over the last 10 years is challenging in some ways because so much of who we are has changed radically. A decade ago when we launched we had a few thousand websites using us, our tiny office was above a nail salon in Palo Alto, our team could be counted on less than two hands, and our data center locations on one hand.

A letter from Cloudflare’s founders (2020)
Outside our first office in Palo Alto in 2010. Photo by Ray Rothrock.

As the company grew, it would have been easy to stick with accelerating and protecting developers and small business websites and not see the broader picture. But, as this year has shown with crystal clarity, we all depend on the Internet for many aspects of our lives: for access to public information and services, to getting work done, for staying in touch with friends and loved ones, and, increasingly, for educating our children, ordering groceries, learning the latest dance moves, and so many other things. The Internet underpins much of what we do every day, and Cloudflare’s mission to help build a better Internet seems more and more important every day.

Over time Cloudflare has gone from an idea on a piece of paper to one of the largest networks in the world that powers millions of customers. Because we made our network to be flexible and programmable, what we’ve been able to do with it has expanded over time as well. Today we secure the Internet end-to-end — from companies’ infrastructure to individuals seeking a faster, more secure, more private connection. Our programmable, global network is at the core of everything we have been able to achieve so far.

Updating Our Annual Founders’ Letter

This is also the approximate one-year anniversary of Cloudflare going public. At the time, we wrote our first founders’ letter to the potential investors. We thought it made sense on this day, which we think of as our birthday, to reflect on the last year, as well as the last 10 years, and start a tradition of updating our original founders’ letter on September 27th every year.

A letter from Cloudflare’s founders (2020)
Ringing the bell to go public on the NYSE on September 13, 2019.

It’s been quite a year for our business. Since our IPO, we’ve seen record expansion of new customers. That growth has come both from expanding our existing customers as well as winning new business from new customers.

The percentage of the Fortune 1,000 that pay for one or more of Cloudflare’s services rose from 10% when we went public to more than 16% today. Across the web as a whole, according to W3Techs’ data, over the last year Cloudflare has grown from 10.1% of the top 10 million websites using our services to 14.5% using them today. (Amazon CloudFront, in second place based on the number of websites they serve, grew from 0.8% to 0.9% over the same period.)

Every year to celebrate our birthday we’ve made it a tradition to launch products that surprise the market with new ways to expand how anyone can use our network. We think of them as gifts back to the Internet. Three years ago, for instance, we launched our edge computing platform called Workers. Today, just three years later, hundreds of thousands of developers are using Workers to build applications, many of which we believe would be impossible to build on any other platform.

This year we’re once again launching a series of products to extend Cloudflare’s capabilities and hopefully surprise and delight the Internet. One that we’re especially excited about brings a new data model to Workers, allowing even more sophisticated applications to be built on the platform.

A letter from Cloudflare’s founders (2020)

The Year of COVID

It is impossible to reflect on the last year and not see the impact of the COVID-19 pandemic on our business, our customers, our employees, as well our friends, colleagues, and loved ones in the greater community. It’s heartening to think that for more than half of Cloudflare’s life as a public company our team has worked remote.

2020 was meant to be an Olympic year, but COVID-19 stopped that, like much else, from happening. Eight years ago, when Cloudflare was just two, the creator of the World Wide Web, Tim Berners-Lee, sent a message from the opening ceremony of the 2012 Olympics. That message read “This is for everyone” and the idea that the Internet is for all of us continues to be a key part of Cloudflare’s ethos today.

When we started Cloudflare we wanted to democratize what we thought were technologies only available to the richest and most Internet-focused organizations. We saw an opportunity to make available to everyone — from individual developers to small businesses to large corporations — the sorts of speed, protection, and reliability that, at the time, only the likes of Google, Amazon, and Facebook could afford.

Giving Back to the Internet

Over 10 years we’ve consistently rolled out the latest technologies, typically ahead of the rest of the industry, to everyone. And in doing so we’ve attracted employees, individuals, developers, customers to our platform. The Internet is for everyone and we’ve shown that a business can be very successful when we aim to serve everyone — large and small.

Something Steve Jobs said back in 1988 still resonates: “If you want to make a revolution, you’ve got to raise the lowest common denominator in every single machine.” Although we aren’t selling machines, we think that’s right: democratizing features matters.

Just look at the scourge of DDoS attacks. Why should DDoS attack mitigation be expensive when it’s a plague on companies large and small? It shouldn’t, and we optimized our business to make it inexpensive for us and passed that on to our customers through Unmetered DDoS Mitigation — another feature we rolled out to celebrate our Birthday Week three years ago.

A letter from Cloudflare’s founders (2020)

In 2014, also during Birthday Week, we launched Universal SSL, making encryption — something that had been expensive and difficult — free for all Cloudflare customers. The week we launched it we doubled the size of the encrypted web. Let’s Encrypt followed shortly after and, together, we’ve brought encryption to more than 90% of the web and made the little padlock in your browser something everyone can afford and should expect.

A letter from Cloudflare’s founders (2020)
Percent of the web served over HTTPS as reported by Google.

Helping Customers During Their Time of Need

In January of this year, we rolled out Cloudflare for Teams. The product was designed to replace the legacy VPNs and firewalls that were increasingly anachronistic as work moved to the cloud. Little did we know how much COVID-19 would accelerate their obsolescence and make Cloudflare for Teams essential.

Both of us sat on call after call in mid-March with at first small, then increasingly mid-sized, and eventually large and even governmental organizations who reached out to us looking for a way to survive as their teams shifted to working from home and their legacy hardware couldn’t keep up. We made the decision to sacrifice short term profits in order to help businesses large and small get through this crisis by making Cloudflare for Teams free through September.

A letter from Cloudflare’s founders (2020)

As we said during our Q1 earnings call, the superheros of this crisis are the medical professionals and scientists who are taking care of the sick and looking for a cure to the disease. But the faithful sidekick throughout has been the Internet. And, as one of the guardians of the Internet, we’re proud of helping ensure it was fast, secure, and reliable around the world when it was needed most. We are proud of how Cloudflare’s products could help the businesses continue to get work done during this unprecedented time by leaning even more on the Internet.

Meeting the Challenges Ahead

Giving back to the Internet is core to who we are, and we do not shy away from a challenge. And there are many challenges ahead. In a little over a month, the United States will hold elections. After the 2016 elections we, along with the rest of the world, were concerned to see technology intended to bring people together instead be used to subvert the democratic process. We decided we needed to do something to help prevent that from happening again.

A letter from Cloudflare’s founders (2020)

Three and a half years ago, we launched the Athenian Project to provide free cybersecurity resources to any local, state, or federal officials helping administer elections in the United States. We couldn’t have built Cloudflare into the company it is today without a stable government as a foundational platform. And, when that foundation is challenged, we believe it is our duty to lend our resources to defend it.

Today, we’re helping secure election infrastructure in more than half of the states in the United States. And, over these last weeks before the election, our team is working around the clock to help ensure the process is fair and not disrupted by cyber attacks.

More challenges lie ahead and we won’t shy away from them. Well intentioned governments around the world are increasingly seeking to regulate the Internet to protect their citizens. While the aims are noble, the risk is creating a patchwork of laws that only the Internet giants can successfully navigate. We believe it is critical for us to engage in the conversations around these regulations and work to help ensure as operating online becomes more complex, we can continue to make the opportunities of the Internet created for us when we started Cloudflare available to future startups and entrepreneurs.

Fighting for the Internet

Over the last 10 years, it’s been sad to watch some of the optimism around technology seem to fade. The perception of technology companies shifted from their being able to do no wrong to, today, their being able to do no right. And, as we’ve watched the industry develop, we’ve sympathized with that shift. Too many tech companies have abused customer data, ignored rules, violated privacy, and not been good citizens to the communities in which they operate and serve.

But we continue to believe what we started Cloudflare believing 10 years ago: the Internet itself is a force for good worth fighting to defend. We need to keep striving to make the Internet itself better — always on, always fast, always secure, always private, and available to everyone.

It’s striking to think how much more disruptive the COVID-19 crisis could have been had it struck in 2010 not 2020. The difference today is a better Internet. We’re proud of the role we’ve played in helping build that better Internet.

And, ten years in, we’re just getting started.

A letter from Cloudflare’s founders (2020)

Welcome to Birthday Week 2020

Post Syndicated from John Graham-Cumming original https://blog.cloudflare.com/welcome-to-birthday-week-2020/

Welcome to Birthday Week 2020

Each year we celebrate our launch on September 27, 2010 with a week of product announcements. We call this Birthday Week, but rather than receiving gifts, we give them away. This year is no different, except that it is… Cloudflare is 10 years old.

Before looking forward to the coming week, let’s take a look back at announcements from previous Birthday Weeks.

Welcome to Birthday Week 2020

A year into Cloudflare’s life (in 2011) we launched automatic support for IPv6. This was the first of a long line of announcements that support our goal of making available to everyone the latest technologies. If you’ve been following Cloudflare’s growth you’ll know those include SPDY/HTTP/2, TLS 1.3, QUIC/HTTP/3, DoH and DoT, WebP, … At two years old we celebrated with a timeline of our first two years and the fact that we’d reached 500,000 domains using the service. A year later that number had tripled.

Welcome to Birthday Week 2020

In 2014 we released Universal SSL and gave all our customers SSL certificates. In one go we massively increased the size of the encrypted web and made it free and simple to go from http:// to https://. Other HTTPS related features we’ve rolled out include: Automatic HTTPS Rewrites, Encrypted SNI and our CT Log.

Welcome to Birthday Week 2020

In 2017 we unwrapped a bunch of goodies with Unmetered DDoS Mitigation, our video streaming service, Cloudflare Stream, the ability to control where private SSL keys stored through Geo Key Manager. And, last but not least, our hugely popular serverless platform Cloudflare Workers. It’s hard to believe that it’s been three years since we changed the way people think about serverless with our massively distributed, secure and fast to update platform.

Welcome to Birthday Week 2020

Two years ago Cloudflare became a domain registrar with the launch of our “at cost” service: Cloudflare Registrar. We also announced the Bandwidth Alliance which is designed to reduce or eliminate high cloud egress fees. We rolled out support for QUIC and Cloudflare Workers got a globally distributed key value store: Workers KV.

Welcome to Birthday Week 2020

Which brings us to last year with the launch of WARP Plus to speed up and secure the “last mile” connection between a device and Cloudflare’s network. Browser Insights so that customers can optimize their website’s performance and see how each Cloudflare tool helps.

We greatly enhanced our bot management tools with Bot Defend Mode, and rolled out Workers Sites to bring the power of Workers and Workers KV to entire websites.

Welcome to Birthday Week 2020

No Spoilers Here

Here are some hints about what to expect this year for our 10th anniversary Birthday Week:

Welcome to Birthday Week 2020
  • Monday: We’re fundamentally changing how people think about Serverless

If you studied computer science you’ll probably have come across Niklaus Wirth’s book “Algorithms + Data Structures = Programs”. We’re going to start the week with two enhancements to Cloudflare Workers that are fundamentally going to change how people think about serverless. The lambda calculus is a nice theoretical foundation, but it’s Turing machines that won the day. If you want to build large, real programs you need to have algorithms and data structures.

Welcome to Birthday Week 2020
  • Tuesday and Wednesday are all about observability. Of an Internet property and of the Internet itself. And they are also about privacy. We’ll roll out new functionality so you can see what’s happening without the need to track people.
Welcome to Birthday Week 2020
  • Thursday is security day with a new service to protect the parts of websites and Internet applications that are behind the scenes. And, finally, on Friday it’s all about one click performance improvements that leverage our more than 200 city network to speed up static and dynamic content.

Welcome to Birthday Week 2020!

Разследване на Зюддойче Цайтунг: Досиетата FinCen: Изчезналата кралица

Post Syndicated from Екип на Биволъ original https://bivol.bg/ruja-fincen.html

неделя 27 септември 2020


Всеки може да забогатее, обеща Ружа Игнатова, адвокат от Шварцвалд.

Милиони хора инвестираха в нейната цифрова валута. Но това беше огромна измама – и от „Криптокралицата“ няма и следа.

Царството

Революционерката организира тържество в бялата си вила на Черно море. Поканени са само няколко десетки души в елегантни рокли и смокинги, седят на кръгли маси в градината, шампанското е изстудено до басейна. Домакинята се забелязва, тъй като през тази лятна нощ в Созопол, България, тя е облечена в рокля с блестящи камъни и с тъмно лилаво червило. Последователите й с благоговение я наричат „Д-р Ружа“ или „Криптокралица“. Тя е кралицата на своя собствен свят.

Ружа Игнатова, тогава на 37 години, управлява създадената от нея дигитална валута, която би трябвало да разруши силата на банките.

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

На снимка, която беше публично оповестена от партито през юли 2017 г., Ружа Игнатова може да бъде видяна да танцува сама на сцената в 4:58 сутринта, с протегнати ръце и затворени очи. Сякаш готова за излитане. И до днес това е последният запис на Криптокралица – ръководител на една от най-големите мрежи за измами в света, която все още не е разбита.

Компанията все още съществува, поне на хартия.

Луксозният фон на празника е нейна собственост, имотът включва вила, басейн, лозе и триетажен частен хотел.

Изглежда тя сама е изградила всичко. Като младо момиче се премества с родителите си и по-малкия си брат от България в Германия, в Шварцвалд, където баща й изкарва прехраната си от търговия с автомобилни гуми. Игнатова учи право, получава германско гражданство и в крайна сметка се връща в България, за да влезе в международния финансов свят от София. Тогава милиони хора вярваха в успеха на Криптокралицата. Милиони хора инвестират в Onecoin.

Докато слънцето залязва, гостите на партито танцуват под песните на специално поканената от САЩ поп-певица Биби Рекса, над морето горят фойерверки, посред нощ започва да вали сняг, защото служител току-що е изстрелял снежно оръдие . Всичко изглежда възможно. „Алиса в страната на чудесата“ е мотото на партито, с което Ружа Игнатова празнува кръщенето на дъщеря си тази вечер.

По-малко от три месеца по-късно Криптокралицата ще изчезне.

Според ФБР тя се качва на самолет на Ryanair до Атина на летище София около 25 октомври 2017 г., очевидно с нищо повече от чанта като багаж. След това следата й се губи и не само ФБР, но и няколко прокурори по целия свят я търсят. Германски следователи също.

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

Според изтекли фирмени документи от Onecoin, с които разполага SZ, мрежата на Игнатова е откраднала поне 5 милиарда евро. Самата компания отказва коментари на твърденията.

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

В Досиетата FinCEN и други изтекли документи, за които SZ, NDR, WDR и Buzzfeed News съобщават от тази седмица, има редица статии, върху които се появява нейното име. Те дават възможност да се тръгне по следите на изчезналите милиарди и да се възстанови по-точно как се е стигнало до гигантската измама.

Обещанието

Всичко започва през юли 2014 г. Повече от 3 години преди изчезването на Криптокралицата, първата публикация на компанията се появи във Facebook. На снимки, които Onecoin публикува няколко месеца по-късно, основателката на компанията седи в 4-звезден хотел в Хелзинки на маса с много мъже, с пастет от сьомга и дива патица.

На пръв поглед Onecoin изглежда като една от безбройните стартиращи финансови технологии, много от които бяха създадени по това време. През 2008 г., в разгара на финансовата криза, разработчик на софтуер с псевдоним Сатоши Накамото – зад който може да се крие екип, който все още не знаем със сигурност – изобретява Биткойн, първата крипто-валута. Така дигиталните пари са извън банковата система. През 2014 г. започват да се разпространяват истории, че хората са станали невероятно богати с тези пари. Но това е само началото, вашата крипто-валута ще създаде много повече богатство, обещава Ружа Игнатова.

Новите Onecoins са подобни на Bitcoin, но уж решават техния основен проблем: едва ли някой разбира как да използва цифровите пари, камо ли как работят. Onecoin, от друга страна, казва Игнатова от сцените по
целия свят, най-после е крипто-валутата за масовия пазар – удобна за използване, сигурна, лесна за разбиране, без непредсказуеми колебания на обменния курс. Една монета за всички. Onecoin.

Ако искате да инвестирате, трябва да закупите така наречения пакет за обучение. Тези пакети струват между няколкостотин и десетки хиляди евро, най-скъпите в даден момент дори 118 000 евро и дори те все още
намират купувачи. Пакетите съдържат подходящото количество Onecoin, както и указания, които обясняват какво представляват криптовалутите и как функционират финансовите пазари.

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

Няма централна банка за криптовалути.

Хората не разчитат на държавна институция, а на други инвеститори, с които са свързани в компютърна мрежа.

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

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

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

По това време брокерите на компанията викаха в микрофоните си във все повече и повече държави, казвайки им колко бързо човек може да забогатее с Onecoin. На едно от първите събития в САЩ гигант на име “Д-р Пробив” троши тухли с ръка на сцената, докато развеселява публиката. „Ще имате финансов пробив!“ – бам! – “ще
разбиете финансовите си проблеми!” – бам! „Беше като инцидент“, казва експерт по криптовалута, който е бил там. – Просто не можете да отклоните поглед. Такива шоута се провеждат и в германските градове, като „Супер събота“ в хотел в Мюнхен.

Всеки, който се присъединява към Onecoin по това време, получава звучното название „Независим маркетингов сътрудник“ и комисионна за набиране на допълнителни инвеститори. Когато тези нови членове
въвеждат на свой ред нови хора в мрежата, получават част от техните комисионни и т.н. Така че има голям стимул за набиране на все повече сътрудници. Класическа пирамидална схема.

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

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

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

През юни 2016 г. Ружа Игнатова ще се появи на една от най-големите сцени в Европа, в лондонската  Арена Уембли. Все още можете да видите изпълнението в YouTube днес. Песента “Това момиче гори” ги приповдига, искри пръскат от пода на сцената.

Тогава тя стои там, както винаги в такива случаи, в блестяща рокля, за да вдигне в приветствие хиляди последователи. „Обичам те“, крещи един.

Две години след старта във Facebook, тя твърди, че Onecoin вече е №2 в криптовалутите. Скоро биткойн също ще бъде надминат. И тогава, “един ден”, “Глобалната борса” ще бъде включена, тогава всеки ще може да обменя своите Onecoins във всяка валута. Но въпреки успеха, тя многократно е обвинявана в нарушаване на философията на крипто-валутите.

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

Onecoin обаче нарушава това правило. Компанията рекламира “централизиран подход”, уж за предотвратяване на пране на пари, финансови измами и финансиране на тероризма. „Хората, които трябва да извършват анонимни плащания, не влизат в нашата мрежа“, казва Игнатова на своите приветстващи я поддръжници.

Колкото повече хора се доверяват на Onecoin, толкова по-тясна става мрежата от лични отношения. “Момчета, ние сме по-голямата общност!”, казва Игнатова. “Ние решаваме каква е философията на криптовалутите!”

Мрежата става толкова голяма, толкова объркваща, че вече не изглежда като да има централен орган, който поддържа общ преглед и контрол – а сякаш Onecoin е безплатна, независима мрежа. Като истинска крипто-валута.

Миналото

По време на появата си на Арена Уембли Ружа Игнатова живее в двуетажен мезонет в луксозния лондонски квартал Кенсингтън, пълен със скъпи произведения на изкуството. Тя притежава и апартамент в Дубай, който струва около 2,5 милиона евро. Тя носи бижута и изключително скъпи вечерни рокли, дори когато просто седи в офиса и пише имейли, както казва бивш служител на Onecoin.

Тази показност разкрива много за младата жена, каквато е била Ружа Игнатова, преди да се превърне в Криптокралица.

През 1990 г. семейството й се премества от България в Шрамберг в Шварцвалд, сънлив град с разрушен замък. Там тя живее, заобиколена от южногермански полуфабрикати, „в тясна къща“, както си спомня един от местните хора. Ружа Игнатова бързо напредва в училище, дори прескача трети клас, въпреки че трябва да учи езика отново.

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

Младата жена с черна коса обича да носи високи токчета, ярко червило и екстравагантни рокли, съобщават бивши съученици от Neue Rottweiler Zeitung.

Игнатова се смята за ексцентрик. Според книгата й „Abitur“, тя предвижда бъдещия си живот по следния начин: „Ще уча право в Хайделберг, тогава ще бъда невероятно успешен адвокат, ще се омъжа за богат човек, ще имам деца и ще прекарам пенсионните си години в един от неговите (моите!) Карибски острови“.

Тя прави докторска степен по право, работи в консултантската компания за управление McKinsey и след това се премества в управителния съвет на българска компания за управление на активи.

Шефката й се казва Цветелина Бориславова, една от най-богатите жени в страната и бивша любовница на днешния премиер Бойко Борисов. Според информацията на ЦРУ Бориславова е изпирала парите от престъпния бизнес чрез Българската американска кредитна банка, която тя притежава: Нелегални сделки с нефт. Търговия с метамфетамин. Това е светът, в който Ружа Игнатова сега навлиза на 29-годишна възраст. Свят, в който има много пари, които трябва да се вземат.

(Тук Зюддойче Цайтунг цитира следния параграф от грамата на посланик Байърли от 1996 г. изтекла в Wikileaks и първо публикувана от Биволъ. “13. (S/NF) Обвинения в миналото свързват Борисов със скандали с източване на гориво, с нелегални сделки в комбинация с Лукойл и със сериозна контрабанда на метаамфетамини. Информацията от SIMO е в потвърждение на тези обвинения. Смята се, че Борисов е използвал поста си, като глава на българските правоохранителни органи, за да прикрие криминалните си деяния, а жената, с която съжителства, Цветелина Бориславова, управлява голяма банка, която е била обвинявана в пране на пари за престъпни организации, както и в участие в незаконните транзакции на самия Борисов. Говори се, че Борисов има сериозни връзки с някои фигури от мафията, включително с Младен Михалев (наричан още Маджо), и с неговия бивш партньор от организираната престъпност Румен Николов (наричан още „Пашата”.” По това време банката на Цветелина Бориславова е СИБАНК, която тя впоследствие продава, преди да придобие БАКБ, Б.прев.)

Нито Бориславова, нито Борисов коментираха твърденията от доклада на ЦРУ по искане на SZ. Кабинетът на Борисов просто заявява, че всеки опит за установяване на връзка между министър-председателя и Onecoin или Игнатова е “манипулация”. Кои контакти Игнатова е осъществила по време на управлението на активите, остава неясно. Адвокатката оставя своя отпечатък едва, когато се появява отново в Германия през 2010 година.

По това време тя купува леярна за стомана в Алгой, Валтенхофен в Бавария. Тя отговаря за финансите, баща й е начело като инженер, майка й работи в офиса. Семеен бизнес.

Само след 2 години Игнатова е препродала компанията и 4 дни след това новият собственик подава молба за временен фалит – имало ли е грешни баланси? Вестник „Кемптен“ цитира новия управител за банкрута му, според който производствените мощности са демонтирани и транспортирани в България малко преди продажбата. Член на IG Metall си спомня, че парите също са изтекли преди сделката. Документите, лаптопите и твърдите дискове са унищожени за една нощ и файловете изведнъж изчезват. Няма и следа от собственика им.

Ружа Игнатова е изчезнала. Точно както тя ще направи отново няколко години по-късно.

Малко се знае за времето преди да се появи отново като Криптокралицата през 2014 г. Във всеки случай измамата в Алгой има последствия. През април 2016 г. Аугсбургският окръжен съд призна Игнатова за виновна за умишлено нарушаване на задълженията в случай на несъстоятелност, за измама в 23 дела и за нарушаване на счетоводни задължения.

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

Откритието

През октомври 2016 г., половин година след осъждането на Игнатова и 4 месеца след нейното представяне в Лондон, телефонът на Бьорн Бьерке звъни. Норвежецът е признат експерт по блокчейн технологията, на която се базират крипто-валутите. Той си спомня разговора много добре и днес: обаждащият се казва, че предлага 250 000 евро годишно, включително апартаменти и коли в Лондон и София. Той работи за компания за криптовалута и иска да наеме Бьерке за разработване на блокчейн.

Криптовалутна компания без блокчейн? За да разбере защо Бьерке става скептичен, когато чува това, човек трябва да знае защо това не може да работи.

Да предположим, че притежавате биткойн. Какво ви пречи просто да го копирате и да го похарчите няколко пъти? Блокчейнът. С прости думи, всяка монета в крипто-валута има свой собствен цифров подпис. Блокчейнът е дълга верига от числа, в която се съхраняват подписите на всички монети в обращение.

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

Тогава Бьерке е поискал да знае името на компанията, за която трябва да разработи блокчейна. Така си спомня днес. Обаждащият се казва само, че „засега няма мандат да разкрие това“. Само при второ
телефонно обаждане той му казва името: Onecoin.

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

Към този момент през октомври 2016 г. в Onecoin вече са се влели около 3,5 милиарда евро от повече от 2 милиона членове по целия свят, включително 56 948 от Германия. Дори от Антарктида, където малко хора живеят в изследователски станции, са направени три инвестиции. Това пише в изтекли документи от Onecoin.

Десет минути, след като разработчикът на блокчейн Бьерке публикува коментара в интернет, той получава съобщение. Така го разказва днес. Германските следователи искат да говорят с него. Много се интересуват от разработчика, резервиран е полет за него. Цивилни служители посрещат Бьерке на летището в Дюселдорф и го отвеждат в охранявана сграда с кола със затъмнени прозорци, през много защитени врати към стая за разпити. Това е Държавната служба на криминалната полиция в Северен Рейн-Вестфалия, Отдел за организирана престъпност.
Днес там потвърждават, че е разпитан „човек от Скандинавия“, за да предостави доказателства за измамата. Почти година по-рано спестовна банка подава жалба в Дюселдорф, след като в рамките на два дни по сметка, принадлежаща на Onecoin, са получени 705 транзакции на обща стойност 2,5 милиона евро. Банкерите определят процеса за съмнителен.

От октомври 2016 г. досега текат производства срещу 9 германски уанкойнъри, които са помогнали за създаването на пирамидалната схема в тази страна. Става въпрос за подозрения за групова бандитска измама, пране на пари, прогресивно придобиване на клиенти и предоставяне на финансови услуги без разрешение. Защото всеки, който предлага финансови услуги в Германия, всъщност се нуждае от разрешение. Onecoin няма такова.

Разследващите ме попитаха дали мога да докажа, че Onecoin няма блокчейн, казва Бьорн Бьерке днес. Отговорил е: да. Той разглежда по-задълбочено предполагаемия блокчейн от Onecoin в Държавната служба на криминалната полиция. След няколко теста му става ясно, че това е компютърен трик. Симулация.

Когато Бьерке се връща у дома, в интернет той публикува видеоклиповете, в които посочва техническите противоречия. Можете да ги видите и днес. Програмистът от Норвегия почти не подозира, че животът му ще се промени от този ден нататък.

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

Публично видео на страницата на уанкойнъри във Facebook показва как мъж стреля с картечница на стрелбище във Виетнам. След това изпраща съобщение до „хейтърите“. “Оставете ни да живеем!
Или ще умрете”, призовава той пред камерата. Той споменава само един от „хейтърите“ по име: “Бьорн, бъдете наясно, бъдете много наясно!”

След това Бьерке започва да разследва. Той иска да знае по-точно кого си е направил враг. Това, което открива, го тревожи. “Наистина лоши хора” са замесени в измамата, казва той във видео-разговора. Кои са те? Той не иска да каже нищо за това. Но има начин да се разбере. Трябва да следвате следите на изгубените пари.

Досиетата FinCEN помагат за това.

Парите на инвеститорите в Onecoin текат във всички посоки по цялата планета, чрез почти неуправляема мрежа от компании и сметки, върху която Ружа Игнатова и нейният кръг тъкат от години. Пътуването започва, например, в Гревен близо до Мюнстер, в International Marketing Services GmbH. Германските инвеститори в onecoin са превели парите си там. Следващата спирка е корпоративна мрежа, базирана на Британските Вирджински острови. След това се оказва във фонд в Обединените арабски емирства. Или в банка на Каймановите острови. Или в Ирландия.

След това парите изтичат от тези пощенски кутии, например в недвижими имоти в стария град София. Или сделка за петролно поле в Мадагаскар. За да подпечатат покупката му, Ружа Игнатова, китайски милиардер и бизнесменът Нийл Буш, брат на бившия президент на САЩ Джордж Буш, се срещат в Хонконг през август 2016 г.

Буш е заместник-председател на съвета на директорите на енергийната компания, която трябва да управлява бизнеса. Твърди се, че той е получил 300 000 долара “надбавка за разходи” за срещата, според окръжния прокурор на Ню Йорк. Буш остави поканата от SZ за среща без отговор. В сделката участва и адвокат от Мюнхен, който също не отговаря на покана за разговор. Очевидно Игнатова го е използвала, за да не се появи името й във вестниците. По причини, които могат да се предположат – по-късно прокурорът ще нарече цялата сделка пране на пари. Съгласно споразумение, голяма част от покупната цена от 340 милиона щатски долара за нефтеното находище трябва да бъде платена в Onecoin – пари, които Игнатова може да генерира с натискането на един бутон.

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

Това би подхождало на Христофорос “Таки” Аманатидис, известен като наркобос и лидер на бруталната “Банда на чуковете”. Парите на Onecoin текат през сметките на приятелката му, бивш български модел, в бизнес с недвижими имоти, както научи в. „Капитал“ в България. Аманатидис, който избяга от властите в Дубай през 2012 г. и се твърди, че управлява бизнеса си оттам, не може да бъде открит за покана за среща от SZ.

Американски адвокат, който организира част от системата за пране на пари за Onecoin, пише на приятелката си чрез Whatsapp от София, че постепенно свиква с охраната: „Те не могат да носят оръжията си на колана, но имат вид изискана мъжка чанта с дръжка през рамо. Всички знаят. Дори полицията е учтива. Лол“.

Наследникът

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

Константин е с 6 години по-млад и съвсем различен тип от елегантната си сестра: Неговият стил е бейзболни шапки и татуировки. Преди да започне в Onecoin, той е работил в Porsche Logistik близо до Щутгарт като шофьор на мотокар. „Консти Кекс“, както понякога се нарича във Facebook, обича да се будалка, на Бъдни вечер лежи на масата в коледен пуловер и го документира с усмивка в Instagram.

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

Изтекли документи на Onecoin показват, че в средата на юни 2017 г. броят на членовете е нараснал особено силно в Латинска Америка, на Индийския субконтинент и в Африка. В този момент се говори за около 3,1 милиона членове по целия свят.

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

През март 2019 г. той беше арестуван от агенти на ФБР на летището в Лос Анджелис и тази история получи внезапен решаващ обрат: Игнатов сключи сделка с прокурора. Той става ключов свидетел срещу империята на сестра си. 

Константин Игнатов ползва същия адвокат като световноизвестния наркобарон Хоакин “Ел Чапо” Гусман или Джон Готи, кръстник на американската Коза Ностра. Сега Джефри Лихтман защитава “Консти Кекс” от Шрамберг.

На 5 ноември 2019 г. той се явява като свидетел в синьо затворническо облекло пред съда на южния район на Ню Йорк, за да даде показания под клетва срещу адвокат, който е прал пари за Onecoin.

Сестра ми Ружа, Крипто-кралицата, знаеше, че властите и вероятно други хора – са по горещи следи на стъпките й, казва той. Тя е получила информацията за разследването й от ФБР, от бивш шеф на оперативния отдел на Люксембургската тайна служба.

Според съобщения в пресата, незабележимият мъж с очила е замесен във всякакви скандали на тайните служби, включващи и тогавашния министър-председател на Люксембург Жан-Клод Юнкер, а за Onecoin се твърди, че е управлявал един вид частна тайна служба. Той оставя заявката за среща със SZ без отговор. Чрез този човек, казва Константин Игнатов пред съда, сестра му е разбрала кой я е предал.

Игнатова е омъжена за адвокат от Франкфурт и има дъщеря от него, чието кръщение отпразнува на екстравагантното парти край басейна. Но има и друг мъж – предприемач, който също е съден в САЩ за съучастие в измамата с Onecoin и за пране на пари. В телефонно обаждане, записано от американски следователи, Игнатова може да се чуе притеснена, че трябва да внимава и да използва само криптирани комуникации. “Можем да получим достъп до имейла ви за 24 часа. Не можете да предотвратите тези глупости”. Тя може да получи всичко, което пожелае, в рамките на 24 часа. “И ако мога да направя това, всеки може.” Тя няма представа на какво са способни „тези руски момчета“.

Двамата са искали да напуснат съпрузите си, да се оженят и да имат деца, казва Игнатов в съда, като цитира сестра си. Но тя не била сигурна дали любовникът й казва истината, дали чувствата й наистина ще бъдат отплатени. Затова тя помолила своя човек от тайните служби от Люксембург да влезе в апартамента на любовника й. Купен е апартамент под неговия и в тавана е пробита дупка за поставяне на микрофон в спалнята му.

Това, което Игнатова трябваше да чуе, надмина най-лошите й очаквания, казва брат й. Той съобщава за среща със сестра си малко преди бягството й през октомври 2017 г. „Тя беше на предела на нервите си. Нейният любовник и съпругата му откраднали парите й. Щяха да й се подиграят. И мъжът, за когото тя искаше да се омъжи, я
предаде“, казва Константин. В съдебната зала се възпроизвежда телефонен запис, който звучи като последно прощално телефонно обаждане. „Никога не съм мислила, че ще бъдеш такъв безгръбначен задник“, казва Игнатова.

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

Половин година след бягството на Ружа през октомври 2017 г., Константин Игнатов казва на съда, че един човек му се е обадил. Той се е представил като високопоставен член на рок бандата Hell’s Angels и го е повикал в Цюрих. Там в един хотел в устата му е пъхнат пистолет: “Казаха ми, че всяко обещание, което им е дадено, трябва да бъде изпълнено. И те ми казаха, че парите, които инвестират във фирмата, струват много повече от живота ми.”

Ами ако престъпниците са по-бързи от властите? Ами ако първо намерят сестра му?

Информатор от компанията докладва на SZ за разговор с шефа на тайната служба на Люксембург Onecoin година след изчезването на Игнатова. Според този мъж, съобщава подателят на сигнала, тя е била видяна малко след бягството си в Солун, където се е качила на микробус на Porsche с петима силни на вид мъже. След това вече няма признаци на живот, няма онлайн активност, нищо. Това е много необичайно.

Той подозира, че Криптокралицата е мъртва.

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

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

Бъдещето

В края на 2019 г. централата на Onecoin в София ще бъде опразнена и съдържанието на офисите ще бъде заредено в ръждясал руски камион. На хартия бивш охранител се използва като управител. Важен ръководител на измамата е арестуван в Тайланд, екстрадиран в САЩ и обвинен там. Прокуратурата в Билефелд съобщи, че никой от деветте германски обвиняеми все още не е официално арестуван. Основният обвиняем и до днес се смята за беглец.

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

Бизнесът е свършен, но мрежата около виртуалните монети е жива. Някои привърженици биха могли да ме малтретират, опасява се за себе си Бьерке. Защо е оставил балонът да се спука, питат те, всичко можеше да продължи така, “отдавна бяхме милионери”. В Германия също около 3700 членове на група за чат в Telegram обменят информация за предполагаемата „криптонизация“. Те отхвърлят всички съобщения за измамата като фалшиви новини, контролирани от банковата система или от „хейтъри“. Точно както им каза Игнатова. Някои от тях все още се надяват, че един ден Криптокралицата ще се върне.

Може би ще го направи. Може би Ружа Игнатова просто се е придържа към собствения си план. ФБР намери стар имейл от 2014 г., когато всичко е започнало. В него тя изброява какво да прави, ако нейният бизнес модел някога трябва да бъде разкрит. Най-отгоре пише: „Вземете парите и бягайте“.

Автор: Филип Боверман, илюстрации: Верена Гериг и Кристиан Тонсман

Превод: Биволъ

Илюстрация: Разследването за Ружа Игнатова е на заглавната страница на “Зюддойче Цайтунг” от събота, 27 септември 2020 г.

Lexy’s Labyrinth

Post Syndicated from Eevee original https://eev.ee/release/2020/09/26/lexys-labyrinth/

Screenshot of a small tile-based puzzle with a number of different elements, taken from CCLP1

🔗 Lexy’s Labyrinth
🔗 Source code on GitHub
🔗 itch.io later

Here is Lexy’s Labyrinth, a web-based Chip’s Challenge emulator.

It’s easy to get into and mostly speaks for itself, so here is a story.


Once upon a time, there was a puzzle game called Chip’s Challenge. It was created in 1989 for the Atari Lynx, an early handheld that is probably best known for… uh… Chip’s Challenge. It stood out as a curious blend of Sokoban head-scratching with real-time action, and it was one of the first computer puzzle games that had a whole pile of different mechanics and relied on exploiting the interesting interactions between them[citation needed].

The game found wider recognition with its inclusion in Microsoft Entertainment Pack 4, and later the Best of Windows Entertainment Pack (charmingly abbreviated “BOWEP”).


That in itself is a curious story — numerous features of the Atari Lynx version were lost in translation, most notably that the Lynx version has the player and monsters slide smoothly between grid cells, whereas the Microsoft port has everything instantly snap from one cell to the next. Also conspicuous is the presence of several typos in level passwords, which are exactly consistent with a set of notes a player took about the Lynx game, but which would be impossible in a straight port — the Lynx level passwords weren’t manually set, but were generated on the fly by a PRNG.

Screenshot of the Microsoft edition of Chip's Challenge, showing the first level, courtesy of the BBC wiki

The most obvious explanation is that the developer responsible for the Microsoft port didn’t have access to the Lynx source code, and in fact, had never played the original game at all. That would explain nearly every major gameplay difference between the Lynx and Microsoft versions, which are all things you’d never notice if you only had static screenshots and maps to work from. Given that restriction, hey, not a bad job.


I played the BOWEP edition of Chip’s Challenge as a kid and was completely enamoured. I suppose what got me the most was the same thing that I found so compelling about Doom: the ability to modify your environment, whether by using blocks to clear water or toggling green blocks or generating new monsters from a clone machine. Being able to affect my environment in (more or less) free-form ways felt curiously powerful.

Well, let’s not think about that too hard. I’ll save it for my therapist.

Some years later I discovered an incredible tool called The Internet, and with it I learned of the impending Chip’s Challenge 2, a sequel with way more tiles and possibilities! Fantastic!

Unfortunately, there was a complication. Epyx, the original publisher of Chip’s Challenge, had gone bankrupt (somehow!) and had sold most of its assets, including the Chip’s Challenge rights, to a company called Bridgestone Media (now Alpha Omega Productions), a Christian propaganda distributor.

You read that correctly.

Bridgestone, a company that generally dealt in movies, had some very peculiar ideas about the video game industry. Apparently they expected the assets they’d acquired to magically make them filthy rich — you know, just like Jesus would want — despite having acquired them from a company that had just evaporated. As such, they told the original developer, Chuck Somerville, that he could only release Chip’s Challenge 2 if he paid them one million dollars upfront.

He did not have one million dollars, and so Chip’s Challenge 2 languished forever.

(At this point, in hindsight, I wonder why Chuck didn’t simply change the story and tileset and release the game under a different name. Apparently he did start on something like this some years later, in the form of an open clone from scratch called Puzzle Studio, but it was eventually abandoned in favor of Chuck’s Challenge 3D. But I still wonder: why start a brand new thing, rather than rebrand and release the existing thing?)

We did have some descriptions of new Chip’s Challenge 2 mechanics, and so at the ripe old age of 15, with no idea what I was doing, I decided I would simply write my own version of Chip’s Challenge 2.

In QBasic.

Also I didn’t really understand how to handle the passage of time, so the game was turn-based and had no monsters.

But, given all that, it wasn’t that bad. I found the source code a few years ago and put it on GitHub along with a sample level and a description of all the tiles you can use in the plaintext level format. I’ve got a prebuilt binary for DOS (usable in DosBox) too, if you like — just have a levels.txt in the same directory, and be sure it uses DOS line endings. I used to have one or two actual levels, but they have tragically been lost to the sands of time.

Screenshot of my QBasic implementation of Chip's Challenge, using all character-based graphics

That would’ve been 2002.


Thirteen years later, in April 2015, a miracle occurred and defeated the Christians. Chip’s Challenge 2 was released on Steam.

It was fine. I don’t know. Over a decade of anticipation gets your hopes up, maybe. It’s a perfectly good puzzle game, and I don’t want to dunk on it, but sometimes I interact with it and I feel all life drain from my body.

Screenshot of CC2, with an overlaid hint saying: "This is Melinda.  Being female, she does some things differently than Chip."
Screenshot of CC2, with an overlaid hint saying: "She doesn't slide when she steps on ice.  But she needs hiking boots to walk on dirt or gravel."

I don’t even know whether to talk about this completely unreadable way of showing hints or the utterly baffling justification of “being female” for these properties.

But it’s fine. The game was Windows-only, but it was old Windows-only, so Wine handled it perfectly well. I played through a few dozen levels. Passwords were gone, so you were free to skip over levels you just didn’t feel like playing.

And then they patched a level editor into the game, and it completely broke under Wine. Completely. Like, would not even run. It’s only in recent years that it even tries to run, and now it can’t draw the window and crashes if you attempt to do anything.

The funny thing is, apparently it doesn’t draw for some people on Windows, either. It doesn’t for me in a Windows VM. The official sanctioned solution is to… install… wined3d, a Windows port of the Wine implementation of Direct3D.

I don’t know. I don’t know! I don’t know what the hell anything. This situation is utterly baffling. What even are computers.


I gave up on the game until recently, when something reminded me of it and I tried it again in Wine. No luck, obviously. I spent half a day squabbling with bleeding-edge versions and Proton patches and all manner of other crap, then resorted to the Bit Busters Club Discord, but they couldn’t help me either.

And then something stirred, deep inside of me. This game wasn’t that complicated, right? I actually know how to make video games now. I even know how to make art, sort of. And sound. And music. And…


And here I am, a month later, having replicated Chip’s Challenge in a web browser, fueled entirely by some new emotion I’ve discovered that lies halfway between spite and exhaustion. My real goal was to clone Chip’s Challenge 2 so I can actually fucking play this game I bought, but it is of course a more complex game. Still, CC2 support is something like 60% done; most of what remains is wiring, tracks, and ghost/rover behavior.

CC1 support is more interesting, anyway — there are far more custom CC1 levels around, and Lexy’s Labyrinth exposes almost 600 of them a mere click away. Given that the original Microsoft port was 16-bit and is now difficult to run (and impossible to buy), and the official (free!) Steam release is fairly awkward and unmaintained (the dev mostly makes vague statements about “old code”), and even the favored emulator Tile World has the aesthetics and usability of a 1991 Unix application, I’m hoping this will make the Chip’s Challenge experience a little more accessible. It has a partially working level editor, too, which lets you share levels you make by simply passing around a URL, and I think that is fucking fantastic.

LL cannot currently load level packs from the Steam release, but it’s a high priority. In the meantime, if you really want to play the original levels (even though CCLP1 is far better in my experience), it’ll load CHIPS.DAT if you’ve got it lying around. Also, it works on phones!


Probably the most time-consuming parts of this project were the assets. I had to draw a whole tileset from scratch, including all of the CC2 tiles which you don’t even get to see yet (and a few of which aren’t actually done). That probably took a week, spread out over the course of the entire last month. Sound effects took several days, though they got much easier once I decided to give up on doing them by wiring LFOs together in SunVox and just use a bunch of BeepBox presets. I spent a couple days on my own music track, and half a dozen other kind souls chipped in their own music — thank you so much, everyone!

And thank you to the Bit Busters Club, whose incredibly detailed knowledge made it possible to match the behavior of a lot of obscure-but-important interactions. The Steam version of CC1 comes with solution replays, and LL can even play a significant number of them back without ever desyncing.

I’ve been ignoring pretty much everything else for a month to get this in a usable state, so I’d like to take a break from it for now, but I’d really like to get all of CC2 working when I can, and of course make the level editor fully functional. I love accessible modding tools, you don’t see many of them in games any more, and with any luck maybe it’ll inspire some other kid to get into game development later.


…okay, I haven’t been ignoring everything else. I also reused the tiles I drew for a fox flux minigame in a similar style, except that you place a limited set of tiles in empty spaces and then let the game run by itself. Kind of like… Chip’s Challenge meets The Incredible Machine.

Recording of a minigame, showing a drone character interacting with moving floors and following instructions on the ground

(That arrow tile has since been updated to be more clear, but it means “when you hit something, turn around instead of stopping and ending the game.”)

I guess two little puzzle game engines isn’t too bad for not quite a month of work!

Ираче Гарсия Перес: „Борисов се провали като лидер“

Post Syndicated from Йоанна Елми original https://toest.bg/iratxe-garcia-perez-interview/

Read the article in English >>

Ираче Гарсия Перес е председателка на Прогресивния алианс на социалистите и демократите – втората по влияние (след ЕНП) група в Европейския парламент, към която принадлежи БСП. Испанската евродепутатка е и член на Комисията по граждански свободи, правосъдие и вътрешни работи (LIBE), на чието заседание на 10 септември т.г. бе изслушана зам.-председателката на Европейската комисия Вера Йоурова относно медийната свобода и върховенството на закона в България. По този повод Йоанна Елми потърси Гарсия Перес за разговор за протестите в България и за ролята на Европа в опазването на европейските ценности. 


На 11 септември „Политико“ съобщи, че сте изпратили писмо до председателката на ЕК Урсула фон дер Лайен, в което настоявате европейските средства да бъдат подчинени на конкретни условия за спазване на върховенството на закона. Бихте ли разяснили кое провокира това писмо и какви са исканията Ви? 

Преди Годишната реч за състоянието на Съюза на г-жа Фон дер Лайен ѝ изпратих писмо, в което от името на Групата на социалистите и демократите поставих на фокус най-належащите проблеми пред Европейския съюз, които смятаме, че трябва да бъдат адресирани незабавно. Върховенството на закона е сред тях. Неговото зачитане и опазването на европейските ценности са ядрото, около което е изграден европейският проект. ЕС не е бизнес клуб, а съюз на ценности и принципи. Нито едно правителство не може да нарушава тези принципи безнаказано. Затова ние се нуждаем от условност на бюджета. Групата ми призовава за установяването на реален и смислен европейски механизъм за демокрацията, върховенството на закона и основните човешки права, с инструменти за санкции, включително възможността да бъдат спрени плащанията от европейския бюджет.

Докладът за 2019 г. на Европейската служба за борба с измамите (ОЛАФ) беше публикуван преди няколко дни. С оглед на Вашата инициатива намирате ли този механизъм – който разчита на националните власти и гражданите да докладват за нередности и има единствено препоръчителна функция – за ефективен в следенето на злоупотреби с европейски средства? Унгария например има огромен дял финансови нарушения в сравнение с останалите страни членки. Но тя е сигнализирала за 64 нередности, свързани с измами (само Полша е подала повече сигнали – 89), докато България – едва за две в програмния период 2014–2020 г. Това със сигурност оказва влияние: ако не докладваш престъпление, няма как да засечеш такова. 

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

Предвижда ли се реформа на ОЛАФ като част от ефективните мерки за следене на средствата по т.нар. план за възстановяване? 

Искам да подчертая, че докладването на нарушения не е въпрос на избор. Държавите членки са задължени да подават сигнали за всякакви финансови нередности до ЕК. Те са също така задължени да защитават европейските средства и да направят всичко по силите си да противодействат на измами и други нелегални действия.

В момента сме в процес на сложни преговори за ревизия на функционирането на ОЛАФ и оценка на аспектите, които имат нужда от подобрение. Моята група подкрепя подсилването на правомощията на ОЛАФ и даването на достъп на Службата до банковите сметки, което би улеснило по-задълбочени разследвания. За Прогресивния алианс на социалистите и демократите е изключително важно ОЛАФ да има достъп до всяка информация, необходима за ефективни разследвания.

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

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

Нека се фокусираме върху България. От „Политико“ цитираха писмото Ви до Фон дер Лайен, в което пишете: „Трябва да стоим зад ценностите си. Не може повече да приемаме ситуацията в държави като Полша и Унгария.“ Но България се представя много по-зле от Полша или Унгария в области като възприятие за корупция, свобода на медиите, човешки права, здравно осигуряване – списъкът е дълъг. Защо Полша и Унгария постоянно са изтъквани като пример за неуспешна интеграция и нарушаване на европейските норми, като се има предвид колко кристално ясни са статистиките? 

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

Както казвате, има и други държави членки, при които ситуацията се развива притеснително, включително и България. ЕС разполага с определени инструменти за предотвратяване на заплахите за демокрацията, но за съжаление, те са базирани основно на диалог с държавата членка. Поради това нашата група в ЕП призовава за механизъм на условност, който да обвързва върховенството на закона с европейските средства, за да може да бъде сложен край на такива злоупотреби.

А смятате ли, че случващото се в България, Унгария и Полша уронва имиджа на европейския проект? Как могат гражданите на Изток и Запад да вярват, че Европа ще защитава справедливостта и ще работи в техен интерес, ако ЕК и някои политици си затварят очите пред неоспорими доказателства за нарушения? 

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

Личните ми впечатления са, че много евродепутати са добре запознати със ситуацията в България. Смятате ли, че търпимостта към премиера Борисов в Европа е политическа и свързана с доминиращата позиция на ЕНП и с нуждата тази позиция да бъде запазена? Как гледат на г-н Борисов европейските политици? 

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

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

В здравата демокрация задачата на опозицията е да противостои на негативното влияние на управляващите. Но през последните няколко години наблюдаваме сливане по различни политически въпроси между българските социалисти и управляващата коалиция от десни и националисти. Местни наблюдатели и журналисти наричат Българската социалистическа партия „патерица на Борисов“. Както писа колежката ми, БСП изигра основна роля в кампанията срещу приемането на Истанбулската конвенция, както и в дезинформацията срещу Стратегията за детето и Закона за социалните услуги. Въпросът ми към Вас е: ако ситуацията беше огледална и БСП доминираше в българския парламент, щеше ли Групата на социалистите и демократите да застане като защитник на европейските принципи? И как можем да избегнем ситуации, в които политическите интереси вземат превес над европейските ценности? 

Няма място за толерантност на базата на политически връзки, когато става въпрос за нарушаване на европейските ценности. Ние сме още по-критични към нашите партии и вътрешните ни дебати са много по-горещи. Ако човек иска да води със своя пример, трябва да започне с подреждане на собствения си дом. Личният пример и отчетността пред гражданите са гаранция, че политическите интереси няма да надделяват над ценностите.

Заглавна снимка: © Ираче Гарсия Перес

Тоест“ разчита единствено на финансовата подкрепа на читателите си.

The collective thoughts of the interwebz

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close