И това ще отмине. Въпросът обаче е как. Свикнали сме да възприемаме демокрацията като даденост. Тя обаче не е. Някои от нас дори си спомнят какво е да я няма.
Седмицата, в която Доналд Тръмп спечели президентските избори в САЩ, а разгневена тълпа провали премиерата на пиеса на Бърнард Шоу, режисирана от Джон Малкович, е към края си. След още четири години от живота ни и Тръмп вече няма да е президент на САЩ. Стига да не е изпълнил предизборното си обещание, че ако американците го изберат, повече никога няма да им се налага да гласуват.
В България се чуха и гласове: ето, в САЩ гледат себе си, хайде да правим и ние така, какво ни интересуват изборите там. Живеем обаче в глобализиран свят. Преизбирането на Тръмп ще се отрази на България поне по два начина.
Първо, щом е възможно страната, символизираща демокрацията и в немалка степен задаваща международния тон, да избере да я оглави осъждан престъпник, който си позволява да обижда и заплашва медии и политически противници, какво да очакваме от България?
Политик, санкциониран по закона „Магнитски“, върти държавата на пръста си? Чудо голямо, то Тръмп го осъдиха, ама… Тълпа провали театрална постановка? Е, ами американци, вдъхновени от Тръмп, нахлуха в Капитолия, пък ние – за един театър… Противопоставяме се на фалшиви новини? Тръмп може да си позволи да говори всякакви небивалици – например, че хаитянските имигранти в Спрингфийлд ядат домашни любимци или че в някои училища се извършват операции за смяна на пола на деца – и да го преизберат.
Второ, перспективите в международен план не изглеждат добре. За палестинците например става все по-трудно да се надяват на разрешение на конфликта с Израел, при което се признава тяхното право да съществуват. А ако в резултат на липсата на подкрепа от страна на САЩ Украйна е принудена да капитулира, това няма да означава край на войната, както обещава Тръмп. Ще означава развързване на ръцете на режима на Путин. При което нищо не ни гарантира, че бомбите няма да почнат да падат и над молдовски глави, после – над румънски и български, след това – над западноевропейски… В една такава ситуация на България бомбите може и да ѝ се разминат, ако тук се установи пропутински режим като този в Унгария. Впрочем точно натам сме се запътили.
Добре дошли в реалността, поздравява ни Йоанна Елми в анализа си защо и как Тръмп не само спечели президентските избори, а и народния вот (наричан „популярен“). Американците не харесват как се развива страната им, и държат досегашните управляващи отговорни за това. И не им пука особено за демокрацията. Изглежда, че и там традиционната партийна система е в криза, както и в Европа. Ала победата на Тръмп е пирова, защото той едва ли ще е спасителят, на когото избирателите се надяват. Няма време за сълзи обаче – животът продължава, трябва да се справяме, както можем.
По другата голяма тема на седмицата – щурма срещу постановката „Оръжията и човекът“ в Народния театър – разсъждава Емилия Милчева в статията си „Моя страна, моя България. В кафяво“. Това не са просто „два свята на патриотизъм“, както твърди директорът на Народния театър, а диктат на единия свят над другия. Същевременно вътрешният министър не видя особен проблем. Все пак спектакълът, изглежда, ще се играе – билетите са разпродадени. Ала в България има твърде много хора, които с кеф биха се изпикали на изкуството, заключава Емилия.
Но да се върнем към нашите си избори, чието протичане според Валентин Вълканов може да се определи като игра на димки. Той смята за притеснителен факта, че мнозинството от парламентарните партии се възприемат като недостатъчно легитимни и неспособни да участват в правителство. Впрочем как да са легитимни при всички данни за манипулиране на изборните резултати, докато МВР само прави показни акции, а нищо не разкрива? Междувременно над нередностите се спуска медийна завеса, от която да останем с впечатление, че „всички са маскари“, и да престанем да търсим истински виновните.
Докато сме на вълната и на българските, и на американските избори, войната в Украйна си продължава. А с нея – и рубриката на Николета Атанасова „Несломимата Украйна“. В нея Николета този път ни разказва за музите по време на война. Освен бомбоубежища, украинците си имат и убежища за душата – многобройни книжарници и книжарнички, уроци по танци, изобщо – творчески дух, който войната катализира. Защото културата е лек за преживяването на непрестанна екзистенциална заплаха.
След културата в Украйна идва ред да обърнем внимание на българското образование. Според Донка Дойчева-Попова в него могат да се въведат 8 промени и без чаканата реформа, която десетилетие след десетилетие никое правителство не се осмелява да осъществи. Например да се въведат блокови часове. Моите часове в 8 клас бяха такива и досега си спомням колко удобно беше – подготовка по по-малко предмети всеки ден, повече концентрация в час. Или да се промени подредбата в стаята. Или учениците да не трябва непрекъснато да размъкват учебници, да подготвят домашни по образец от миналото хилядолетие, в час да има повече диалози, да се развиват полезни умения в часа на класа, да има изнесени уроци (още помня как учителят по рисуване провеждаше част от часовете си в двора). И най-важното – учителите да се отнасят с уважение към учениците.
От културата и образованието преминаваме към науката и нейните етични измерения. Анастасия Орманджиева ни обръща внимание върху големия въпрос за експерименталните животни в биомедицинските науки. Имаме ли морално право да подлагаме на изследвания животни с риск да им навредим само за да извлечем ползи за хората? Но пък без опитите с животни напредъкът в хуманната и ветеринарната медицина би бил невъзможен. Макар този дебат да изглежда като омагьосан кръг, все пак частични решения се намират. Например в някои случаи може да се експериментира с отделни клетки, а не с цели животни.
Хората възприемат не само животните като по-нисши от себе си, а и някои групи хора като по-нисши или по-висши от други. Българката Мая Донева научава, че в авторитетна брюкселска организация на предшественика ѝ са плащали 30% повече, отколкото на нея, защото е жена и е от Източна Европа. Донева се бори за справедливост дори с риска това да разочарова висшестоящите. Повече подробности – в статията „Колко е важно да бъдеш разочароващ(а)“.
Знам, че очаквате накрая да ви препоръчам нещо. Този път препоръката ми ще е по-различна от обикновено.
Пожелавам и на вас, и на себе си да бъдем с хората, които са важни за нас, и да правим нещата, които искаме и обичаме. Да гледаме театралните постановки и филмите, които искаме. Да четем книгите, които искаме. Да слушаме музиката, която обичаме. Да пътуваме, където искаме. Да следим и да подкрепяме медиите, на които имаме доверие.
Защото нищо от тези неща не е даденост и нищо не гарантира, че няма да ни бъде отнето.
This release of Metasploit Framework has added exciting new features such as new payloads that target the RISC-V architecture. These payloads allow for the execution of commands on compromised hardware, allowing Metasploit Framework and Metasploit Payloads to be used in more environments.
SMB To HTTP(S) Relay
This new exploit worked on by Rapid7 contributors targets the ESC8 vulnerability. This work is a part of the recent Kerberos and Active Directory efforts targeting multiple ESC vulnerabilities, implementing modern security workflows into Metasploit Framework.
It includes a modified SMB capture server to repackage and forward authentication from the SMB capture server to an NTLM-authenticating HTTP server. The authenticated HTTP Client is then passed to the ESC8 module which then requests the creation of certificates and downloads them.
Python Exec Payload
A new addition to the payloads catalog this week has been a new Python payload, developed by zeroSteiner allowing for the execution of arbitrary OS commands. This payload is compatible with Python 2.7 and 3.4+.
New module content (10)
SolarWinds Web Help Desk Backdoor (CVE-2024-28987)
Authors: Michael Heinzl and Zach Hanley
Type: Auxiliary
Pull request: #19499 contributed by h4x-x0r
Path: gather/solarwinds_webhelpdesk_backdoor
AttackerKB reference: CVE-2024-28987
Description: This module exploits a backdoor in SolarWinds Web Help Desk (CVE-2024-28987) <= v12.8.3 to retrieve all tickets from the system.
WordPress TI WooCommerce Wishlist SQL Injection (CVE-2024-43917)
Authors: Rafie Muhammad and Valentin Lobstein
Type: Auxiliary
Pull request: #19517 contributed by Chocapikk
Path: scanner/http/wp_ti_woocommerce_wishlist_sqli
AttackerKB reference: CVE-2024-43917
Description: This new auxiliary module exploits an unauthenticated SQL injection vulnerability in the TI WooCommerce Wishlist plugin for WordPress (versions <= 2.8.2). The vulnerability allows attackers to execute SQL queries via the order parameter which can be used to dump usernames and their hashed passwords.
ESC8 Relay: SMB to HTTP(S)
Authors: Spencer McIntyre, bwatters-r7, and jhicks-r7
Type: Auxiliary
Pull request: #19404 contributed by bwatters-r7
Path: server/relay/esc8
Description: This is an implementation of the AD CS ESC8. It includes a library that uses a modified SMB capture server to repackage and forward authentication from the SMB capture server to an NTLM-authenticating HTTP server. The authenticated HTTP Client is then passed to the ESC8 module which then requests the creation of certificates and downloads them.
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Linux Execute Command
Authors: bcoles [email protected] and modexp
Type: Payload (Single)
Pull request: #19518 contributed by bcoles
Path: linux/riscv32le/exec
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Linux Execute Command
Authors: bcoles [email protected] and modexp
Type: Payload (Single)
Pull request: #19518 contributed by bcoles
Path: linux/riscv64le/exec
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Description: Add support for RISC-V 32-bit / 64-bit Little Endian payloads. Includes Linux Execute Command payloads and Linux Reboot payloads for testing.
Description: Adds a new exec payload leveraging python.
Enhancements and features (2)
#19529 from NtAlexio2 – This updates the pipe_dcerpc_auditor module to use the new pattern for handling port settings which offers users greater control over their targeting.
#19550 from Mathiou04 – Fixes an issue where when USER_AS_PASS as pass was enabled the USERNAME would not be attempted as a PASSWORD.
#19619 from smashery – This fixes a regression crash in the auxiliary/admin/kerberos/get_ticket module.
Documentation
You can find the latest Metasploit documentation on our docsite at docs.metasploit.com.
Get it
As always, you can update to the latest Metasploit Framework with msfupdate
and you can get more details on the changes since the last blog post from
GitHub:
Back In Time is a GPL-2.0-licensed backup tool based on
rsync and written in Python. It has both graphical and command-line interfaces, and
supports backups to local disks or over SSH.
Back In Time was originally written by
Oprea Dan and released in 2009. The tool has been
through some rough patches over the years, and is currently on its third set of
maintainers. Christian Buhtz, one of the current maintainers, explained to me
how he and his co-maintainers had revived the project, as well as why he thought
Back In Time stood out from all of the existing backup solutions.
Today, Amazon Location Service released 17 new and enhanced APIs that expand and improve capabilities for the Routes, Places, and Maps functionalities, creating a more cohesive and streamlined experience for developers. By introducing enhanced features and offering simplified migration, these updates make Amazon Location Service more accessible and useful for a wide range of applications.
You can now access advanced route optimization, toll cost calculations, GPS traces snapping, and a variety of map styles with static and dynamic rendering options, and perform proximity-based search and predictive suggestions, with rich, detailed information on points of interest.
At Amazon, the vast majority of our roadmaps are driven by customer feedback. Many customers building applications with Amazon Location Service have shared that they need purpose-built APIs and more granular details, such as contact information and business hours, when working with location-based data. Although the current API set has provided valuable tools for many customers, developers have expressed a desire for additional capabilities, such as detailed route planning, proximity-based searches, additional places details, and static map images. These new APIs address these requests and provide a more comprehensive, out-of-the-box location solution.
New and enhanced capabilities Today’s launch introduces 10 updated APIs and seven entirely new APIs, responding directly to your feedback. Each service—Routes, Places, and Maps—receives specific enhancements designed to support a broader range of use cases.
Routes The Amazon Location Routes API now supports advanced route planning and customization options, allowing users to:
CalculateIsolines to identify service areas within specific travel time, or distance
OptimizeWaypoints to determine the most efficient sequence of waypoints, helping to minimize either travel time or distance
Calculate Toll Costs to provide precise cost estimates for routes involving toll roads
SnapToRoads, to enable precise matching of GPS traces by snapping points to the road network
With these capabilities, you can design more accurate and dynamic route experiences for your users. For example, a logistics company could optimize driver routes in real-time, factoring in live traffic and minimizing travel costs for deliveries.
Maps The updated Amazon Location Maps API includes more purpose-built map styles crafted by skilled cartographers. These map styles offer professional designs that accelerate time to market and eliminate the need for custom map creation. Additionally, the Static Map Image feature allows developers to integrate static maps within applications, reducing the need for continuous data streaming and improving performance in use cases where interactivity isn’t necessary.
Key features of the Maps API include:
GetTile, to download a tile from a tileset, with a specified X, Y, and Z axis values
GetStaticMap, which enables the rendering of non-interactive maps for reporting or visualization purposes
Places The Amazon Location Places API enhancements allow more detailed search capabilities, addressing requests for increased granularity in location data. The new capabilities include:
SearchNearby and Autocomplete, which support proximity-based queries and enable predictive text features for better user experiences
Enhanced business details with categories such as Business Hours, Contact Information, and additional attributes for points of interest
These features are especially useful for applications where users need detailed information about nearby locations, such as food delivery services or retail applications. Imagine that a customer opens a food delivery application, searches for nearby restaurants using SearchNearby, and retrieves restaurant details such as business hours and contact information to confirm availability. Once multiple delivery orders are assigned to a driver, the application uses OptimizeWaypoints to suggest the most efficient route for pickups and deliveries. As the driver follows the route, SnaptoRoads provides precise visualization of their location, enhancing the customer’s real-time tracking experience.
Enhanced Location Service in action Calling the API is straightforward. You can use the AWS Command Line Interface (AWS CLI), one of our AWS SDKs, or the plain REST API. However, displaying the information on a map in a web or mobile app requires some additional setup. Although the process is well documented, it’s too detailed to cover fully here. In this demo, I’ll focus on using the API.
Amazon Location Service allows API calls to be authenticated in two ways: through AWS API authentication (AWS Sigv4 authentication) or through API keys. API keys can be more convenient for developers of mobile applications where the end user is not authenticated or when integrating with Amazon Cognito is not feasible. This is the recommended authentication method for front-end applications.
To demonstrate the versatility of the APIs and how easily you can integrate inside your applications, I use a combination of the AWS CLI, cURL, and a graphical REST API client for each step of the demo.
Step 1: Create an API key
First, I create an API key for my application using the AWS CLI. You can also manage API keys in the AWS Management Console.
This command generates the API key, which I can now use to call Amazon Location APIs.
Step 2: Get geographic coordinates
Next, I use cURL to retrieve the geographic coordinates (a longitude and latitude) for the city center of Lille, France, by calling GeoCode and passing an address in the QueryText parameter.
This returns several data points, including the GPS coordinates for the city center: [3.06361, 50.63706].
Step 3: Search for nearby places
Using the coordinates retrieved, I use a REST API client tool to call the SearchNearby API to find places of interest around Lille’s city center.
On the right side of the screen, I can read the API response: a list of nearby places, such as restaurants, banks, and parking areas. I can further refine the search by specifying categories or restricting the search area.
The SearchNearby API accepts an optional Filter parameter that helps you restrict the search within a bounding box or to include or exclude business chains, categories, countries, or food types.
Step 5: Displaying the driving directions on a map
To visualize the route on a map, I use the MapLibre library, which is a rendering engine for displaying maps in web and mobile applications. Following the Amazon Location Service Developer Guide, I built a basic app to display the route.
In addition to MapLibre, you can use AWS Amplify to integrate and display Amazon Location data in your applications.
Getting started With these new and updated APIs, Amazon Location Service offers a more comprehensive suite of mapping and location data for your business needs. These will help to accelerate your development lifecyle by increasing developers’ agility and scalability.
Fedora Linux, as a rule, handles version upgrades reasonably
well. However, there are times when users may want to do a fresh
installation rather than an upgrade but preserve existing
users and data under /home. This is a scenario that the
Fedora installer, currently, does not address. Users can maintain a
separate /home partition, of course, but the installer does
not incorporate existing users into the new install—that is an
exercise left to the user to handle. One solution might be to use systemd-homed, a systemd
service for managing users and home directories. However, a discussion
proposing the use systemd-homed as part of Fedora installation
uncovered some hurdles, such as trying to blend its approach to
managing users with tools that centralize user management.
Likewise, many GCC plugins are used for increasing the safety of
critical projects such as the Linux kernel, which has recently
gained support for the Rust programming language. This makes gccrs a useful tool for analyzing unsafe Rust code, and
more generally Rust code which has to interact with existing C
code. We also want gccrs to be a useful tool for rustc itself by helping pan out the Rust specification
effort with a unique viewpoint – that of a tool trying to replicate
another’s functionality, oftentimes through careful experimentation
and source reading where the existing documentation did not go into
enough detail.
Amazon Redshift is a fast, fully managed cloud data warehouse that makes it cost-effective to analyze your data using standard SQL and business intelligence tools. You can use Amazon Redshift to analyze structured and semi-structured data and seamlessly query data lakes and operational databases, using AWS designed hardware and automated machine learning (ML)-based tuning to deliver top-tier price performance at scale.
Amazon Redshift delivers price performance right out of the box. However, it also offers additional optimizations that you can use to further improve this performance and achieve even faster query response times from your data warehouse.
One such optimization for reducing query runtime is to precompute query results in the form of a materialized view. Materialized views in Redshift speed up running queries on large tables. This is useful for queries that involve aggregations and multi-table joins. Materialized views store a precomputed result set of these queries and also support incremental refresh capability for local tables.
Customers use data lake tables to achieve cost effective storage and interoperability with other tools. With open table formats (OTFs) such as Apache Iceberg, data is continuously being added and updated.
Amazon Redshift now provides the ability to incrementally refresh your materialized views on data lake tables including open file and table formats such as Apache Iceberg.
In this post, we will show you step-by-step what operations are supported on both open file formats and transactional data lake tables to enable incremental refresh of the materialized view.
Prerequisites
To walk through the examples in this post, you need the following prerequisites:
You can test the incremental refresh of materialized views on standard data lake tables in your account using an existing Redshift data warehouse and data lake. However, if you want to test the examples using sample data, download the sample data. The sample files are ‘|’ delimited text files.
Incremental materialized view refresh on standard data lake tables
In this section, you learn how to can build and incrementally refresh materialized views in Amazon Redshift on standard text files in Amazon S3, maintaining data freshness with a cost-effective approach.
Upload the first file, customer.tbl.1, downloaded from the Prerequisites section in your desired S3 bucket with the prefix customer.
Connect to your Amazon Redshift Serverless workgroup or Redshift provisioned cluster using Query editor v2.
Create an external schema.
create external schema datalake_mv_demo
from data catalog
database 'datalake-mv-demo'
iam_role default;
Create an external table named customer in the external schema datalake_mv_demo created in the preceding step.
Validate the sample data in the external customer.
select * from datalake_mv_demo.customer;
Create a materialized view on the external table.
CREATE MATERIALIZED VIEW customer_mv
AS
select * from datalake_mv_demo.customer;
Validate the data in the materialized view.
select * from customer_mv limit 5;
Upload a new file customer.tbl.2 in the same S3 bucket and customer prefix location. This file contains one additional record.
Using Query editor v2 , refresh the materialized view customer_mv.
REFRESH MATERIALIZED VIEW customer_mv;
Validate the incremental refresh of the materialized view when the new file is added.
select mv_name, status, start_time, end_time
from SYS_MV_REFRESH_HISTORY
where mv_name='customer_mv'
order by start_time DESC;
Retrieve the current number of rows present in the materialized view customer_mv.
select count(*) from customer_mv;
Delete the existing file customer.tbl.1 from the same S3 bucket and prefix customer. You should only have customer.tbl.2 in the customer prefix of your S3 bucket.
Using Query editor v2, refresh the materialized view customer_mv again.
REFRESH MATERIALIZED VIEW customer_mv;
Verify that the materialized view is refreshed incrementally when the existing file is deleted.
select mv_name, status, start_time, end_time
from SYS_MV_REFRESH_HISTORY
where mv_name='customer_mv'
order by start_time DESC;
Retrieve the current row count in the materialized view customer_mv. It should now have one record as present in the customer.tbl.2 file.
select count(*) from customer_mv;
Modify the contents of the previously downloaded customer.tbl.2 file by altering the customer key from 999999999 to 111111111.
Save the modified file and upload it again to the same S3 bucket, overwriting the existing file within the customer prefix.
Using Query editor v2, refresh the materialized view customer_mv
REFRESH MATERIALIZED VIEW customer_mv;
Validate that the materialized view was incrementally refreshed after the data was modified in the file.
select mv_name, status, start_time, end_time
from SYS_MV_REFRESH_HISTORY
where mv_name='customer_mv'
order by start_time DESC;
Validate that the data in the materialized view reflects your prior data changes from 999999999 to 111111111.
select * from customer_mv;
Incremental materialized view refresh on Apache Iceberg data lake tables
Apache Iceberg is a data lake open table format that’s rapidly becoming an industry standard for managing data in data lakes. Iceberg introduces new capabilities that enable multiple applications to work together on the same data in a transactionally consistent manner.
In this section, we will explore how Amazon Redshift can seamlessly integrate with Apache Iceberg. You can use this integration to build materialized views and incrementally refresh them using a cost-effective approach, maintaining the freshness of the stored data.
Using Query editor v2, refresh the materialized view mv_category.
Refresh MATERIALIZED view mv_category;
Validate the incremental refresh of the materialized view after the additional data was populated in the Iceberg table.
select mv_name, status, start_time, end_time
from SYS_MV_REFRESH_HISTORY
where mv_name='mv_category'
order by start_time DESC;
Using Amazon Athena, modify the Iceberg table iceberg_mv_demo.category by deleting and updating records.
delete from iceberg_mv_demo.category
where catid = 3;
update iceberg_mv_demo.category
set catdesc= 'American National Basketball Association'
where catid=4;
Validate the sample data in iceberg_mv_demo.category to confirm that catid=4 has been updated and catid=3 has been deleted from the table.
select * from iceberg_mv_demo.category;
Using Query editor v2, Refresh the materialized view mv_category.
Refresh MATERIALIZED view mv_category;
Validate the incremental refresh of the materialized view after one row was updated and another was deleted.
select mv_name, status, start_time, end_time
from SYS_MV_REFRESH_HISTORY
where mv_name='mv_category'
order by start_time DESC;
Performance Improvements
To understand the performance improvements of incremental refresh over full recompute, we used the industry-standard TPC-DS benchmark using 3 TB data sets for Iceberg tables configured in copy-on-write. In our benchmark, fact tables are stored on Amazon S3, while dimension tables are in Redshift. We created 34 materialized views representing different customer use cases on a Redshift provisioned cluster of size ra3.4xl with 4 nodes. We applied 1% inserts and deletes on fact tables, i.e., tables store_sales, catalog_sales and web_sales. We ran the inserts and deletes with Spark SQL on EMR serverless. We refreshed all 34 materialized views using incremental refresh and measured refresh latencies. We repeated the experiment using full recompute.
Our experiments show that incremental refresh provides substantial performance gains over full recompute. After insertions, incremental refresh was 13.5X faster on average than full recompute (maximum 43.8X, minimum 1.8X). After deletions, incremental refresh was 15X faster on average (maximum 47X, minimum 1.2X). The following graphs illustrate the latency of refresh.
Inserts
Deletes
Clean up
When you’re done, remove any resources that you no longer need to avoid ongoing charges.
Run the following script to clean up the Amazon Redshift objects.
DROP MATERIALIZED view mv_category;
DROP MATERIALIZED view customer_mv;
Run the following script to clean up the Apache Iceberg tables using Amazon Athena.
DROP TABLE iceberg_mv_demo.category;
Conclusion
Materialized views on Amazon Redshift can be a powerful optimization tool. With incremental refresh of materialized views on data lake tables, you can store pre-computed results of your queries over one or more base tables, providing a cost-effective approach to maintaining fresh data. We encourage you to update your data lake workloads and use the incremental materialized view feature. If you’re new to Amazon Redshift, try the Getting Started tutorial and use the free trial to create and provision your first cluster and experiment with the feature.
Raks Khare is a Senior Analytics Specialist Solutions Architect at AWS based out of Pennsylvania. He helps customers across varying industries and regions architect data analytics solutions at scale on the AWS platform. Outside of work, he likes exploring new travel and food destinations and spending quality time with his family.
Tahir Aziz is an Analytics Solution Architect at AWS. He has worked with building data warehouses and big data solutions for over 15+ years. He loves to help customers design end-to-end analytics solutions on AWS. Outside of work, he enjoys traveling and cooking.
Raza Hafeez is a Senior Product Manager at Amazon Redshift. He has over 13 years of professional experience building and optimizing enterprise data warehouses and is passionate about enabling customers to realize the power of their data. He specializes in migrating enterprise data warehouses to AWS Modern Data Architecture.
Enrico Siragusa is a Senior Software Development Engineer at Amazon Redshift. He contributed to query processing and materialized views. Enrico holds a M.Sc. in Computer Science from the University of Paris-Est and a Ph.D. in Bioinformatics from the International Max Planck Research School in Computational Biology and Scientific Computing in Berlin.
“Only 17% of organizations can clearly identify and inventory a majority (95% or more) of their assets.” – Gartner
Imagine the scenario: your organization has been exposed to a new zero-day vulnerability. You are responsible for Threat & Vulnerability Management (TVM), you have asked your IT department for an assessment of the asset inventory in your organization.
You make the same request to your security team. Both teams give you a different number of assets, with a significant disparity: IT reports 10,000 assets, compared to 8,200 from your colleagues in security.
When you look up your Configuration Management Database (CMDB_ application, you quickly discover that it has not been updated for months and does not accurately represent of your attack surface either.
How do you measure your risk exposure when three sources of information are not in agreement? Your highly-skilled colleagues are now back to using spreadsheets to document your assets—a very manual and time-consuming process that is not a productive use of their time.
Attack Surface Management (ASM)
ASM covers both internal and external assets—the physical and digital assets that an organization needs to have visibility into in order to understand its security posture. By establishing visibility of the attack surface and implementing management processes to prioritize, validate, and mobilize responses, security teams can reduce exposures exploited by malicious threat actors.
“Asset inventory is a common and well-known problem for organizations.”
Manage the Gap in Asset Inventory with Surface Command
We began this blog with a real-life and anonymized example for a customer and the disparity in their asset count between IT and Security teams. Surface Command addresses this operational challenge. Firstly, Surface Command is platform-agnostic; what’s important to Rapid7 is capturing your actual number of assets using a mixture of external scanning and importing data feeds from over 100 commonly used IT and Security tools (EDR, CNAPP, VM, CMDB, etc.). This provides a true, constantly updated view of all assets across the cloud and on-premises. Assets detailed will include cloud containers, servers, workstations, IoT devices, identities, smartphones and more.
To help demonstrate the value of this complete visibility, we have created a short, 2-minute product tour, which you can view at your convenience. In this initial product tour, we show how to identify coverage gaps in your security posture using Surface Command. Take the example of a zero-day vulnerability discovered for a particular operating system; you need to understand your attack surface immediately.
Surface Command will quickly display assets missing key security controls, such as a deployed endpoint security agent. You can drill down further to focus on assets by operating system or device type. This technology is powered by Rapid7’s Machine Learning (ML) classifiers to ensure coverage and data accuracy.
Watch as we filter down from a large number of total assets, to a smaller, focused number of high-risk assets that can be prioritized for action by your IT and Security Teams, all done with just a few clicks.
This scenario is commonly used by our customers to quickly identify simple security gaps, and with Surface Command, you can easily save this for future use, as well as publish the results to reporting dashboards.
By establishing visibility of the attack surface and implementing management processes to prioritize, validate, and mobilize responses, security teams can reduce their exposure and improve cyber risk management.
Когато в държава от Европейския съюз граждански протести прераснат в цензура, спираща книги, филми и театрални представления, започва да ехти Die Fahne hoch! на нацисткия химнописец Хорст Весел.
Чуваме ли?
Националистически агитки спряха хората, купили билети за пиесата„Оръжията и човекът“ на Бърнард Шоу, да гледат постановката в Народния театър, защото унизявала, казват, достойнството на българите и българските офицери. Миналото лято подобни агитки провалиха и прожекции на белгийския филм „Близо“, защото уж разпространявал хомосексуална пропаганда и педофилия. Пак националисти от „Възраждане“ и сродни на тях формации публикуваха черен списък на учители, обявили се срещу злокобната и безполезна поправка за т.нар. джендър пропаганда, и организираха кампания срещу Националната природо-математическа гимназия в София заради нагнетен скандал с ученик, в който вкараха и Истанбулската конвенция.
Това не са просто „два свята на патриотизъм“, за които говори директорът на Народния театър Васил Василев. Това е диктат на единия свят, шумен и креслив, в който момчета от футболни агитки се смесват с ослепени от пропагандата мозъци и заплашват свободата на изразяване, без която не само изкуството, а и демократичните общества не могат да съществуват. Под тази заплаха в България са артисти, интелектуалци, активисти, които са срещу монопола на мисленето, налаган постепенно в политика, медии, социални мрежи. Този монопол не само задушава обществото в догми, но прави хората по-уязвими на пропаганда и контрол и застрашава самите основи на демокрацията.
Със слабата политическа съпротива и негласното институционално съдействие, в това число и на полицията, тази нова културна революция си проправя път. Уви, не само в България, макар че тук я улеснява масираната прокремълска пропаганда. Също и симпатиите към (завърналия се в Белия дом) Доналд Тръмп на 49% от нашите сънародници, установени от „Галъп“. Но и към Путин – 37% от българите според проучване на френската агенция Ipsos харесват руския президент, което е най-високият резултат в целия ЕС.
Служебният министър на вътрешните работи Атанас Илков не видя никакви проблеми пред Народния театър след провалената постановка на Джон Малкович. Дори посочи като виновник директора на театъра Васил Василев, въпреки че отговорността за реда и сигурността не е на Василев, опитал се да осъществи цивилизован диалог с протестиращите.
„Контрапатриотично“
Пред Народния театър на 7 ноември все пак имаше два свята. Единият, който развяваше знамена, обиждаше на „еничари“, „педераси“, „предатели“ и „евроатлантически подлоги“, хвърляше камъни и удряше. Гражданка патриотка със знаменце в ръка беше довела и кучето си, което се изпика на стълбите на театъра, а качил се върху една от колоните ултрас с черна маска също развяваше флаг.
Другият свят си чакаше кротко с билетитe и дори предлагаше на беснеещите отсреща да им ги подари, за да гледат постановката. „Да ги нагрубим с думи, които нe знаят“, предложи някой. А други се възмущаваха, че полицията не прави нищо, за да пусне публиката, и пяха химна заедно с лагера отсреща.
„Какво имате срещу една пиеса – ами Бай Ганьо?“, имаше такъв въпрос от дошлите да гледат постановката към родолюбците. „Бай Ганьо е самоирония, а това е обида, унижение!“, беше отговорът. (Така де, само българи може да пишат сатира за българи, не и чужденци…)
След седмици на подгряване в определени медии и социални мрежи, в антиваксърски групи и националистически организации, Столичната община и СДВР, които съгласуват протеста, не бяха предвидили периметър пред входа на театъра, който да позволи на хората с билети да влязат, за да гледат постановката, а на протестиращите – да изразят недоволството си от „гаврата с паметта на българската саможертва в Сръбско-българската война през 1885 г.“. От Народния театър предупредиха в позиция за случващото се още преди премиерата и бяха подкрепени и от Европейската театрална конвенция.
Трябва да признаем сериозността на тази ситуация. В една демократична европейска държава не трябва да има толерантност към подобна цензура и сплашване. Това е решителен момент за Европа да заеме позиция и да отхвърли опасния възход на ултранационалистически движения, които се стремят да заглушат творческите гласове и да разрушат нашите културни основи.
Министърът на културата Найден Тодоров, който е пианист, композитор и диригент на Софийската филхармония, също защити изкуството.
Можем да вземем оставката на директора на Народния театър, да забраним постановката, после аз мога да кажа две-три други постановки, които трябва да забраним, разбира се, трябва да забраним Бърнард Шоу, после да започнем да горим книгите, после знаем какво следва – нацизъм.
Не мога да обсъждам репертоара на Народния театър с онова безпросветно леке, което нападна Владо Пенев. Владо Пенев с една от стоте си роли е направил повече за България и за българската култура, отколкото тези говеда ще направят когато и да било. Затова не се обясняваш с тях, не спориш, не ги каниш на театър…
„Кристална нощ“ нарече аниматорът Теодор Ушев вечерта на 7 ноември, след като беше нападнат от агитките. Задържани за безредиците нямаше. Но все пак полицията се е поразмърдала, след като съобщи, че са установени нападателите на Ушев и тези, които удряха директора на Народния театър Васил Василев. Макар вътрешният министър Илков вече да се произнесе, че „хаос не е имало“.
Софийската районна прокуратура се самосезира за безредиците пред Народния театър и възложи разследването на СДВР – същите, които трябваше да направят възможното те да не се състоят. Впрочем вътрешният министър обеща да бъдат гледани записи от камери, за да се види кой е удрял.
В България прокуратурата и полицията протежират националистите още от времената на „Атака“ – „бабата“ на днешните „Възраждане“, „Величие“ и прочее. Но бият протестиращи срещу властта скришом, зад колони. През 2015 г. Европейският съд по правата на човека в Страсбург осъди България заради нападенията на привърженици на „Атака“ срещу софийската джамия „Баня Башъ“.
На 20 май 2011 г. Волен Сидеров и депутати от „Атака“ поведоха протест срещу високоговорителите на храма и прекъснаха петъчната молитва на мюсюлманите. Стигна се до грозни сцени на сблъсъци, подпалени молитвени килимчета и рязане на фесове, а Сидеров определи намесилите се полицаи като „еничари“. Разследването срещу него пропадна. По-късно и самата „Атака“ пропадна, но все по-отровни нейни двойници се появяват.
Три от българските партии пуснаха декларации, в които осъдиха цензурата и забраната на правото на свободно изразяване – ГЕРБ, „Продължаваме промяната“ и „Да, България“, част от „Демократична България“. Но макар от ПП–ДБ да определиха протеста като подготвяна акция и активно мероприятие на хора, свързани с бившата Държавна сигурност, искания за оставки нямаше, нито бяха назовани политическите сили, подпомогнали изстъпленията. Сред протестиращите пред Народния театър бяха Цончо Ганев и Коста Стоянов от третата парламентарно представена партия „Възраждане“, Красимир Каракачанов и Ангел Джамбазки от ВМРО, също и лидерът на Българското национално обединение Георги Георгиев.
Вместо епилог
Знаете ли, че когато строяли Народния театър, отсреща живеел един богат търговец, който, като се вдигала сградата, вдигнал и той своята, за да може да пикае отгоре на театъра, както сам казвал.
Разказва го жена, кротко пушеща пред полицаите, която се отказа да чака Народният театър да отвори вратите си, защото на следваща сутрин има дело със столичната „Топлофикация“.
Спектакълът обаче ще се играе, билетите са разпродадени. Малкович никога не е мислил, че някой може да се обиди на пиеса. В България има твърде много хора, които с кеф биха се изпикали на изкуството.
Over the last year, Cloudflare has begun formally verifying the correctness of our internal DNS addressing behavior — the logic that determines which IP address a DNS query receives when it hits our authoritative nameserver. This means that for every possible DNS query for a proxied domain we could receive, we try to mathematically prove properties about our DNS addressing behavior, even when different systems (owned by different teams) at Cloudflare have contradictory views on which IP addresses should be returned.
To achieve this, we formally verify the programs — written in a custom Lisp-like programming language — that our nameserver executes when it receives a DNS query. These programs determine which IP addresses to return. Whenever an engineer changes one of these programs, we run all the programs through our custom model checker (written in Racket + Rosette) to check for certain bugs (e.g., one program overshadowing another) before the programs are deployed.
Our formal verifier runs in production today, and is part of a larger addressing system called Topaz. In fact, it’s likely you’ve made a DNS query today that triggered a formally verified Topaz program.
This post is a technical description of how Topaz’s formal verification works. Besides being a valuable tool for Cloudflare engineers, Topaz is a real-world example of formal verification applied to networked systems. We hope it inspires other network operators to incorporate formal methods, where appropriate, to help make the Internet more reliable for all.
Topaz’s full technical details have been peer-reviewed and published in ACM SIGCOMM 2024, with both a paper and short video available online.
Addressing: how IP addresses are chosen
When a DNS query for a customer’s proxied domain hits Cloudflare’s nameserver, the nameserver returns an IP address — but how does it decide which address to return?
Let’s make this more concrete. When a customer, say example.com, signs up for Cloudflare and proxies their traffic through Cloudflare, it makes Cloudflare’s nameserver authoritative for their domain, which means our nameserver has the authority to respond to DNS queries for example.com. Later, when a client makes a DNS query for example.com, the client’s recursive DNS resolver (for example, 1.1.1.1) queries our nameserver for the authoritative response. Our nameserver returns someCloudflare IP address (of our choosing) to the resolver, which forwards that address to the client. The client then uses the IP address to connect to Cloudflare’s network, which is a global anycast network — every data center advertises all of our addresses.
Clients query Cloudflare’s nameserver (via their resolver) for customer domains. The nameserver returns Cloudflare IP addresses, advertised by our entire global network, which the client uses to connect to the customer domain. Cloudflare may then connect to the origin server to fulfill the user’s HTTPS request.
When the customer has configured a static IP address for their domain, our nameserver’s choice of IP address is simple: it simply returns that static address in response to queries made for that domain.
But for all other customer domains, our nameserver could respond with virtually any IP address that we own and operate. We may return the same address in response to queries for different domains, or different addresses in response to different queries for the same domain. We do this for resilience, but also because decoupling names and IP addresses improves flexibility.
With all that in mind, let’s return to our initial question: given a query for a proxied domain without a static IP, which IP address should be returned? The answer: Cloudflare chooses IP addresses to meet various business objectives. For instance, we may choose IPs to:
Change the IP address of a domain that is under attack.
Direct fractions of traffic to specific IP addresses to test new features or services.
To change authoritative nameserver behavior — how we choose IPs — a Cloudflare engineer encodes their desired DNS business objective as a declarative Topaz program. Our nameserver stores the list of all such programs such that when it receives a DNS query for a proxied domain, it executes the list of programs in sequence until one returns an IP address. It then returns that IP to the resolver.
Topaz receives DNS queries (metadata included) for proxied domains from Cloudflare’s nameserver. It executes a list of policies in sequence until a match is found. It returns the resulting IP address to the nameserver, which forwards it to the resolver.
What do these programs look like?
Each Topaz program has three primary components:
Match function: A program’s match function specifies under which circumstances the program should execute. It takes as input DNS query metadata (e.g., datacenter information, account information) and outputs a boolean. If, given a DNS query, the match function returns true, the program’s response function is executed.
Response function: A program’s response function specifies which IP addresses should be chosen. It also takes as input all the DNS query metadata, but outputs a 3-tuple (IPv4 addresses, IPv6 addresses, and TTL). When a program’s match function returns true, its corresponding response function is executed. The resulting IP addresses and TTL are returned to the resolver that made the query.
Configuration: A program’s configuration is a set of variables that parameterize that program’s match and response function. The match and response functions reference variables in the corresponding configuration, thereby separating the macro-level behavior of a program (match/response functions) from its nitty-gritty details (specific IP addresses, names, etc.). This separation makes it easier to understand how a Topaz program behaves at a glance, without getting bogged down by specific function parameters.
Let’s walk through an example Topaz program. The goal of this program is to give all queried domains whose metadata field “tag1” is equal to “orange” a particular IP address. The program looks like this:
Before we walk through the program, note that the program’s configuration, match, and response function are YAML strings, but more specifically they are topaz-lang expressions. Topaz-lang is the domain-specific language (DSL) we created specifically for expressing Topaz programs. It is based on Scheme, but is much simpler. It is dynamically typed, it is not Turing complete, and every expression evaluates to exactly one value (though functions can throw errors). Operators cannot define functions within topaz-lang, they can only add new DSL functions by writing functions in the host language (Go). The DSL provides basic types (numbers, lists, maps) but also Topaz-specific types, like IPv4/IPv6 addresses and TTLs.
Let’s now examine this program in detail.
The config is a set of four bindings from name to value. The first binds the string ”orange” to the name desired_tag1. The second binds the IPv4 address 192.0.2.3 to the name ipv4. The third binds the IPv6 address 2001:DB8:1:3 to the name ipv6. And the fourth binds the TTL (for which we added a topaz-lang type) 300 (seconds) to the name t.
The match function is an expression that must evaluate to a boolean. It can reference configuration values (e.g., desired_tag1), and can also reference DNS query fields. All DNS query fields use the prefix query_ and are brought into scope at evaluation time. This program’s match function checks whether deired_tag1 is equal to the tag attached to the queried domain, query_domain_tag1.
The response function is an expression that evaluates to the special response type, which is really just a 3-tuple consisting of: a list of IPv4 addresses, a list of IPv6 addresses, and a TTL. This program’s response function simply returns the configured IPv4 address, IPv6 address, and TTL (seconds).
Critically, all Topaz programs are encoded as YAML and live in the same version-controlled file. Imagine this program file contained only the orange program above, but now, a new team wants to add a new program, which checks whether the queried domain’s “tag1” field is equal to “orange” AND that the domain’s “tag2” field is equal to true:
This new team must place their new orange_and_true program either below or above the orange program in the file containing the list of Topaz programs. For instance, they could place orange_and_true after orange, like so:
Now let’s add a third, more interesting Topaz program. Say a Cloudflare team wants to test a modified version of our CDN’s HTTP server on a small percentage of domains, and only in a subset of Cloudflare’s data centers. Furthermore, they want to distribute these queries across a specific IP prefix such that queries for the same domain get the same IP. They write the following:
This Topaz program is significantly more complicated, so let’s walk through it.
Starting with configuration:
The first configuration value, purple_datacenters, is bound to the expression (fetch_datacenters “purple”), which is a function that retrieves all Cloudflare data centers tagged “purple” via an internal HTTP API. The result of this function call is a list of data centers.
The second configuration value, percentage, is a number representing the fraction of traffic we would like our program to act upon.
The third and fourth names are bound to IP prefixes, v4 and v6 respectively (note the built-in ipv4_prefix and ipv6_prefix types).
The match function is also more complicated. First, note the let form — this lets operators define local variables. We define one local variable, a random number generator called rand seeded with the hash of the queried domain name. The match expression itself is a conjunction that checks two things.
First, it checks whether the query landed in a data center tagged “purple”.
Second, it checks whether a random number between 0 and 99 (produced by a generator seeded by the domain name) is less than the configured percentage. By seeding the random number generator with the domain, the program ensures that 10% of domains trigger a match. If we had seeded the RNG with, say, the query ID, then queries for the same domain would behave differently.
Together, the conjuncts guarantee that the match expression evaluates to true for 10% of domains queried in “purple” data centers.
Now let’s look at the response function. We define three local variables. The first is a hash of the domain. The second is an IPv4 address selected from the configured IPv4 prefix. select_from always chooses the same IP address given the same prefix and hash — this ensures that queries for a given domain always receive the same IP address (which makes it easier to correlate queries for a single domain), but that queries for different domains can receive different IP addresses within the configured prefix. The third local variable is an IPv6 address selected similarly. The response function returns these IP addresses and a TTL of value 1 (second).
Topaz programs are executed on the hot path
Topaz’s control plane validates the list of programs and distributes them to our global nameserver instances. As we’ve seen, the list of programs reside in a single, version-controlled YAML file. When an operator changes this file (i.e., adds a program, removes a program, or modifies an existing program), Topaz’s control plane does the following things in order:
First, it validates the programs, making sure there are no syntax errors.
Second, it “finalizes” each program’s configuration by evaluating every configuration binding and storing the result. (For instance, to finalize the purple program, it evaluates fetch_datacenters, storing the resulting list. This way our authoritative nameservers never need to retrieve external data.)
Third, it verifies the finalized programs, which we will explain below.
Finally, it distributes the finalized programs across our network.
Topaz’s control plane distributes the programs to all servers globally by writing the list of programs to QuickSilver, our edge key-value store. The Topaz service on each server detects changes in Quicksilver and updates its program list.
When our nameserver service receives a DNS query, it augments the query with additional metadata (e.g., tags) and then forwards the query to the Topaz service (both services run on every Cloudflare server) via Inter-Process Communication (IPC). Topaz, upon receiving a DNS query from the nameserver, walks through its program list, executing each program’s match function (using the topaz-lang interpreter) with the DNS query in scope (with values prefixed with query_). It walks the list until a match function returns true. It then executes that program’s response function, and returns the resulting IP addresses and TTL to our nameserver. The nameserver packages these addresses and TTL in valid DNS format, and then returns them to the resolver.
Topaz programs are formally verified
Before programs are distributed to our global network, they are formally verified. Each program is passed through our formal verification tool which throws an error if a program has a bug, or if two programs (e.g., the orange_and_true and orange programs) conflict with one another.
The Topaz formal verifier (model-checker) checks three properties.
First, it checks that each program is satisfiable — that there exists some DNS query that causes each program’s match function to return true. This property is useful for detecting internally-inconsistent programs that will simply never match. For instance, if a program’s match expression was (and true false), there exists no query that will cause this to evaluate to true, so the verifier throws an error.
Second, it checks that each program is reachable — that there exists some DNS query that causes each program’s match function to return truegiven all preceding programs. This property is useful for detecting “dead” programs that are completely overshadowed by higher-priority programs. For instance, recall the ordering of the orange and orange_and_true programs:
The verifier would throw an error because the orange_and_true program is unreachable. For all DNS queries for which query_domain_tag1 is ”orange”, regardless of metadata2, the orange program will always match, which means the orange_and_true program will never match. To resolve this error, we’d need to swap these two programs like we did above.
Finally, and most importantly, the verifier checks for program conflicts: queries that cause any two programs to both match. If such a query exists, it throws an error (and prints the relevant query), and the operators are forced to resolve the conflict by changing their programs. However, it only checks whether specific programs conflict — those that are explicitly marked exclusive. Operators mark their program as exclusive if they want to be sure that no other exclusive program could match on the same queries.
To see what conflict detection looks like, consider the corrected ordering of the orange_and_true and orange programs, but note that the two programs have now been marked exclusive:
After marking these two programs exclusive, the verifier will throw an error. Not only will it say that these two programs can contradict one another, but it will provide a sample query as proof:
Checking: no exclusive programs match the same queries: check FAILED!
Intersecting programs found:
programs "orange_and_true" and "orange" both match any query...
to any domain...
with tag1: "orange"
with tag2: true
The teams behind the orange and orange_and_true programs respectively must resolve this conflict before these programs are deployed, and can use the above query to help them do so. To resolve the conflict, the teams have a few options. The simplest option is to remove the exclusive setting from one program, and acknowledge that it is simply not possible for these programs to be exclusive. In that case, the order of the two programs matters (one must have higher priority). This is fine! Topaz allows developers to write certain programs that absolutely cannot overlap with other programs (using exclusive), but sometimes that is just not possible. And when it’s not, at least program priority is explicit.
Note: in practice, we place all exclusive programs at the top of the program file. This makes it easier to reason about interactions between exclusive and non-exclusive programs.
In short, verification is powerful not only because it catches bugs (e.g., satisfiability and reachability), but it also highlights the consequences of program changes. It helps operators understand the impact of their changes by providing immediate feedback. If two programs conflict, operators are forced to resolve it before deployment, rather than after an incident.
Bonus: verification-powered diffs. One of the newest features we’ve added to the verifier is one we call semantic diffs. It’s in early stages, but the key insight is that operators often just want to understand the impact of changes, even if these changes are deemed safe. To help operators, the verifier compares the old and new versions of the program file. Specifically, it looks for any query that matched program X in the old version, but matches a different program Y in the new version (or vice versa). For instance, if we changed orange_and_true thus:
Generating a report to help you understand your changes...
NOTE: the queries below (if any) are just examples. Other such queries may exist.
* program "orange_and_true" now MATCHES any query...
to any domain...
with tag1: "orange"
with tag2: false
While not exhaustive, this information helps operators understand whether their changes are doing what they intend or not, before deployment. We look forward to expanding our verifier’s diff capabilities going forward.
How Topaz’s verifier works, and its tradeoffs
How does the verifier work? At a high-level, the verifier checks that, for all possible DNS queries, the three properties outlined above are satisfied. A Satisfiability Modulo Theories (SMT) solver — which we explain below — makes this seemingly impossible operation feasible. (It doesn’t literally loop over all DNS queries, but it is equivalent to doing so — it provides exhaustive proof.)
We implemented our formal verifier in Rosette, a solver-enhanced domain-specific language written in the Racket programming language. Rosette makes writing a verifier more of an engineering exercise, rather than a formal logic test: if you can express the interpreter for your language in Racket/Rosette, you get verification “for free”, in some sense. We wrote a topaz-lang interpreter in Racket, then crafted our three properties using the Rosette DSL.
How does Rosette work? Rosette translates our desired properties into formulae in first-order logic. At a high level, these formulae are like equations from algebra class in school, with “unknowns” or variables. For instance, when checking whether the orange program is reachable (with the orange_and_true program ordered before it), Rosette produces the formula ((NOT orange_and_true.match) AND orange.match). The “unknowns” here are the DNS query parameters that these match functions operate over, e.g., query_domain_tag1. To solve this formula, Rosette interfaces with an SMT solver (like Z3), which is specifically designed to solve these types of formulae by efficiently finding values to assign to the DNS query parameters that make the formulae true. Once the SMT solver finds satisfying values, Rosette translates them into a Racket data structure: in our case, a sample DNS query. In this example, once it finds a satisfying DNS query, it would report that the orange program is indeed reachable.
However, verification is not free. The primary cost is maintenance. The model checker’s interpreter (Racket) must be kept in lockstep with the main interpreter (Go). If they fall out-of-sync, the verifier loses the ability to accurately detect bugs. Furthermore, functions added to topaz-lang must be compatible with formal verification.
Also, not all functions are easily verifiable, which means we must restrict the kinds of functions that program authors can write. Rosette can only verify functions that operate over integers and bit-vectors. This means we only permit functions whose operations can be converted into operations over integers and bit-vectors. While this seems restrictive, it actually gets us pretty far. The main challenge is strings: Topaz does not support programs that, for example, manipulate or work with substrings of the queried domain name. However, it does support simple operations on closed-set strings. For instance, it supports checking if two domain names are equal, because we can convert all strings to a small set of values representable using integers (which are easily verifiable).
Fortunately, thanks to our design of Topaz programs, the verifier need not be compatible with all Topaz program code. The verifier only ever examines Topaz match functions, so only the functions specified in match functions need to be verification-compatible. We encountered other challenges when working to make our model accurate, like modeling randomness — if you are interested in the details, we encourage you to read the paper.
Another potential cost is verification speed. We find that the verifier can ensure our existing seven programs satisfy all three properties within about six seconds, which is acceptable because verification happens only at build time. We verify programs centrally, before programs are deployed, and only when programs change.
We also ran microbenchmarks to determine how fast the verifier can check more programs — we found that, for instance, it would take the verifier about 300 seconds to verify 50 programs. While 300 seconds is still acceptable, we are looking into verifier optimizations that will reduce the time further.
Bringing formal verification from research to production
Topaz’s verifier began as a research project, and has since been deployed to production. It formally verifies all changes made to the authoritative DNS behavior specified in Topaz.
For more in-depth information on Topaz, see both our research paper published at SIGCOMM 2024 and the recording of the talk.
We thank our former intern, Tim Alberdingk-Thijm, for his invaluable work on Topaz’s verifier.
The Open Source Initiative has published (news article here) its definition of “open source AI,” and it’s terrible. It allows for secret training data and mechanisms. It allows for development to be done in secret. Since for a neural network, the training data is the source code—it’s how the model gets programmed—the definition makes no sense.
And it’s confusing; most “open source” AI models—like LLAMA—are open source in name only. But the OSI seems to have been co-opted by industry players that want both corporate secrecy and the “open source” label. (Here’s one rebuttal to the definition.)
This is worth fighting for. We need a publicAIoption, and open source—real open source—is a necessary component of that.
But while open source should mean open source, there are some partially open models that need some sort of definition. There is a big research field of privacy-preserving, federated methods of ML model training and I think that is a good thing. And OSI has a point here:
Why do you allow the exclusion of some training data?
Because we want Open Source AI to exist also in fields where data cannot be legally shared, for example medical AI. Laws that permit training on data often limit the resharing of that same data to protect copyright or other interests. Privacy rules also give a person the rightful ability to control their most sensitive information like decisions about their health. Similarly, much of the world’s Indigenous knowledge is protected through mechanisms that are not compatible with later-developed frameworks for rights exclusivity and sharing.
How about we call this “open weights” and not open source?
От десетилетия вече се обсъжда така необходимата реформа на образователната система у нас. Спорадичните мерки, които се вземат, много често са чисто административни и не засягат основния потърпевш от неадекватността на системата – самия ученик. Учители и директори обаче упорито не използват свободата, давана от сравнително широката рамка, в която могат да се движат при изпълнение на задълженията си. И всичко, което не е „предписано“ изрично, бива заобикаляно старателно като нещо отровно, като натрапен свободноизбираем час.
Блокови часове
Два поредни часа математика. Няма наредба, която да забранява това. Единственото изискване е да има почивка след всеки учебен час.
40-минутните часове са абсолютно недостатъчни, ако трябва да съберем в един от тях преподаване на нов урок и затвърждаването на новия материал. Оставането по-дълго в една тема (което препълнените учебни планове правят и бездруго невъзможно) е гаранция за по-голям успех. Учудващо, това се практикува в множество частни училища, които показват нагледно колко е ползотворно, но общинските и държавните училища упорито отказват да променят заучената формула за 7 различни учебни часа на ден.
Член 2 от Наредба 10 от 19.06.2014 гласи:
Седмичните учебни разписания трябва да осигуряват условия за най-добро усвояване на учебното съдържание при най-малка степен на умора и опазване здравето на учениците.
А член 3, алинея 2 от същата наредба казва:
Учебните предмети в дневното разписание се подреждат в последователност, осигуряваща оптимална работоспособност.
Най-доброто усвояване и по-добрата работоспособност биха били една идея по-възможни, ако не трябва на по-малко от астрономически час децата да превключват в коренно различни сфери на знание.
Трябва да признаем, че макар и минимални, все пак тук-там намираме взаимовръзките между отделните предмети в рамките на една учебна година. Дали не е време някой да се престраши и да въведе дни на хуманитарните науки и дни на естествените науки например? Само да не вземе да му хрумне да събира и учителите по тези предмети заедно, това вече би надскочило най-големите ни мечти. Но няма страшно, със сигурност някоя наредба го прави толкова трудно, че никой не си го е и помислял.
Подредба в стаята
Все повече училища успяват да осъвременят класните стаи и да приютят учениците в нови, по-леки и по-удобни учебни пространства. Рядко се прави обаче с мисълта дали новите мебели ще са от полза за работа в групи, дали ще са достатъчно мобилни, за да може да се разместват лесно, а още по-рядко зад избора им стои мисълта дали ще допринесат за учебния процес. Вече споменаваната плачевна учебна среда всъщност без усилия и без погазването на указанията в безбройните наредби може да бъде използвана за подобряване на работната атмосфера, за разнообразяване на видовете дейности и за радост на учениците.
Реалността обаче показва, че учителите обичат все още да стоят пред класа, а не да са в центъра му. Разместването пък обикновено е само при проблеми с дисциплината.
Нека учителите не се притесняват да бъдат смели и да разместят мебелите в стаята. Така и те самите ще могат да я погледнат с нови очи.
Носене на учебници
Учебникът е само ръководство, в което се съдържа рамката. Как точно ще преподадем един урок, е въпрос на желание и способности. Почти всички учители държат всяко дете да носи своя личен учебник, въпреки че това по никакъв начин не допринася за по-доброто научаване на материала.
Вариантите тук са много и никой от тях не е забранен:
организиране на комплект учебници, които да стоят в кабинета по дадения предмет;
ползване на един учебник на чин – това е сериозно облекчение, ако се има предвид колко тежки са раниците на децата;
разрешаване (поне от време на време) на използването на електронен учебник по време на час;
изнасяне на урок без учебник – напълно е възможно учебникът понякога да остане неизползван.
Домашни от миналия век
Да научиш наизуст „Отечество любезно, как хубаво си ти!“ в шести клас не е геройство, нито означава, че си разбрал стихотворението. Да не говорим за оценяването тип „до трети куплет за четворка“, което малко прилича на „550 грама Иван Вазов за 4 лева“. Децата могат да бъдат разходени по текста, може той да се свърже със съвремието – нещо, което е все по-нужно. А ако стихотворението толкова ги е впечатлило, те може и сами да пожелаят да го научат.
Писането на думи по три реда като домашно по който и да е чужд език не води задължително до научаването им. Безплатни приложения като Quizlet например, където думите могат да бъдат вкарани във виртуални карти, със сигурност ще подтикнат учениците да заобичат по-силно и учителя, и чуждия език. На преподавателя ще му коства около 10 минути на урок, но пък ще може впоследствие да използва картите всяка година. В същото време децата ще са усвоили страхотна и доказана техника на учене, създадена през миналия век в Германия – Karteikarten.
Повече диалог, не само цифри
Оценката е цифра и тя е еднаква за всички, които са я получили. Получателите обаче са различни. Не бива цифрите да говорят вместо учителите. Би било добре преподавателите да се опитват да разберат какво друго има зад конкретното представяне на ученика. Може детето да не е научило, защото е уморено (защо?), защото е претоварено (защо?), защото нарочно не е научило (защо?). Не бива да се диагностицира моментното състояние, а това, което е довело до него.
Полезни умения в часа на класа
Чудесен час, в който може да се изгражда истинска връзка между децата от класа и учителя. И това е час, който зависи само от вас – преподавателя. Може да се канят интересни гости, да се провеждат дискусии, да се покаже, че освен класен ръководител, учителят е просто човек като всички. Може дори децата да се водят на разходка. Нищо от посоченото не е забранено.
В учебната година има 36 седмици, тоест 36 часа на разположение. Дори безумното разпределение за задължителните теми, които са почти идентични с тези от предходни години (тук посочвам темите за 7. клас), могат да излязат от калъпа на скучните монолози.
Патриотично възпитание и изграждане на национално самочувствиe – 4 часа. Класните ръководители имат 4 часа да разкажат и покажат какво обичат в България и защо, при положение че са свободни хора и са избрали да са тук. Може да бъде поканен гост в час – някой, завърнал в България след години в чужбина.
Толерантност и интеркултурен диалог – 2 часа. Гостът от предишната точка може да разкаже как е живял в чуждата културна среда. Може да бъде поканен издател или преводач – едни от най-добрите културни посланици.
Безопасност и движение по пътищата – 5 часа. Децата и класният застават заедно на кръстовище и търсят правилно/грешно. Ще има голямо разнообразие.
Защита на населението при бедствия, аварии и катастрофи; оказване на първа помощ – 5 часа. Чудесно време за първия истински курс по оказване на първа помощ. Има чудесни организации, които провеждат обучения по изключително интересен и достъпен начин.
Превенция на насилието, справяне с гнева и с агресията; мирно решаване на конфликти – 2 часа. Може да бъде поканен психологът на училището или медиатор – нека разкажат за работата си. Може да се разучат техники за справяне с гнева, които учителят да предаде на децата.
Превенция на тероризма и поведение при терористична заплаха; киберзащита – 2 часа. Варианти: гледане на филм, посещение с децата в полицията и разговор с полицаите.
Превенция и противодействие на корупцията – 1 час. Лесно може да се покаже на живо какво е корупция, дори без да се политизира разговорът, защото, за съжаление, корупцията е навсякъде. Децата могат да бъдат провокирани да помислят как биха постъпили, ако: а) могат да променят законите; б) могат да дадат подкуп; в) ги хванат, че подкупват; и още, и още.
Електронно управление и медийна грамотност – 1 час. Варианти за провеждане на часа: как работи електронният подпис или приложението е-здраве.
Кариерно ориентиране – 1 час. Тук може да се отдели повече време, защото със сигурност има много остатъчни часове. Може да се проведе като посещение в различни производства или офиси, за да проследят децата процесите на практика и да наблюдават, макар и за малко, реалния професионален живот.
Изнесени уроци
Като говорим за разходки, няма час, който да не може да бъде проведен навън. Или с гости. „Уроците“ могат да бъдат поканени в класната стая или класът да бъде заведен при живия урок. Учителят има пълното право на това и никой не би трябвало да го спре.
Отношение
Ако учителите се отнасят с уважение към учениците си, ще получават същото от децата. Не бива да ги подценяваме или унижаваме. Нека всеки от нас се опита да си спомни какви сме били на тяхната възраст. А понякога не е лошо дори да им го разказваме. Да, може учителите да разкажат за себе си, когато са били на мястото на учениците, да ги спечелят за каузите си и да им покажат, че и те са хора и не са перфектни. Никой не е. Особено когато се учи.
Наказанията рядко водят до добри резултати. Обикновено водят до страх и омраза. Викането в час от страна на учителите все още е широко разпространено явление, а директорите, които са наясно с тези членове на екипите им, най-често ги оправдават като силно емоционални или просто „с такъв тембър“.
Редовните контроли, които се провеждат вътрешно в училище или от външни експерти, често водят до това учителите да впрегнат цялото си въображение, да използват мултимедийната техника в клас, която никога не са докосвали, да направят интересен и полезен за учениците час, да са в добро настроение и да не повишават тон.
В следващия учебен час обаче, когато няма проверяващи, всичко се връща постарому.
Така учениците нагледно получават „най-важните“ уроци. Единият е, че всичко е привидно, за парлама. А другият – че не е нужно да се прави нищо извън задължителното, нищо по лична инициатива. А това възпитава ново поколение от непредприемчиви и незаинтересовани бъдещи учители, служители и членове на обществото, повечето от които няма да знаят, че е възможно да излязат извън строго задължителното.
Каквото и да си говорим, колкото и чудесни програми да има, колкото и неизброими да са всички възможности, незабранени от наредби и закони, на първо място в инструментариума са самите учители.
Когато оставят за малко учебника настрани и покажат ангажираност, когато се опитат да излязат дори със сантиметър извън задължителния минимум и въведат нов похват, когато просто се усмихват или простят чуждата грешка без назидание, тогава вече са спечелили класа си и са на прав път. И децата първи ще им го покажат.
Доналд Тръмп е 47-мият президент на САЩ. Въпреки неписаното правило много журналисти и анализатори си позволиха да прекарат последните седмици в прогнози кой ще победи – и предсказанието обикновено завършваше с победа за кандидата на демократите Камала Харис. Можем да си кажем само: добре дошли в реалността. И да се опитаме да отговорим на въпроса, който всички вероятно си задават след нощта на 5 ноември:
Как е възможно?
Победата на Тръмп не е просто победа – той става първият републикански кандидат-президент, спечелил популярния вот от 20 години насам. Освен това се очертава т.нар. червена вълна – Камарата на представителите, както и Сенатът ще бъдат под контрола на Републиканската партия. Тръмп отбелязва преднина почти навсякъде в САЩ – както в традиционно демократични анклави, така и в провинцията. Тръмп получава по-голяма подкрепа и от кандидатите на републиканците по населени места, т.е. повече хора са подкрепили него като кандидат-президент на републиканците, отколкото кандидатите на същата партия за сенатори и представители.
Тръмп отбелязва преднина сред всички демографски групи, с изключение на хората над 65 години и белите образовани жени. Екзитполовете показват много вероятни причини за това извън традиционната – че при влошена икономическа ситуация в страната избирателите обикновено наказват партията, която е на власт; че във времена на кризи, войни и несигурност хората винаги предпочитат авторитарни лидери.
Една от причините е силното недоволство относно „посоката, в която върви САЩ“. 43% от запитаните в екзитпол на CNN казват, че не са доволни, а 29% са гневни. Едва 19% са доволни, а смешните 7% са „ентусиазирани“. В този контекст изборът на Тръмп не е просто подкрепа за републиканска идеология или икономическа доктрина (както казахме, Тръмп се представя по-добре от партийните представители по места). Изборът на Тръмп е нещо повече: определен неприличен жест, който американският избирател показва на цялата система.
Руската рулетка на съвременната демокрация
Писали сме по темата достатъчно, за да няма нужда да го повтаряме: американската демокрация е в криза и причината не е Доналд Тръмп. Става въпрос за криза на доверието в институциите, на вярата в американския идеал и на възможността „американската мечта“ да бъде реализирана, както и на конфронтация с нейните исторически противоречия. Тази криза се разиграва в контекста на световна криза и възход на авторитаризма поради потребност от силни, харизматични лидери – приказка, стара като историята. Понякога кризите имат късмета да попаднат на лидери като Рузвелт. Друг път… Друг път – не.
Kраят на XX и началото на XXI в. може да се разглежда като бавен разпад на идентичността, с която САЩ съществува в света след Втората световна война. Униженията, грешките и лицемерието на войните във Виетнам, Афганистан, Ирак, Сирия; финансовата криза и спасяването на спекулантите за сметка на обществото – модел, който след това се повтаря и с опиоидната криза, за която има отговорни, но няма последствия; разпадът на СССР и изчезването на идеологическия враг, спрямо когото Америка разглежда себе си като „лидер на свободния свят“ и добър герой; разрастването на медийни таблоидни империи като тази на Роджър Ейлс и Рупърт Мърдок (които не просто промениха информационния поток на новото време, а го съчетаха с изпипани пропагандни техники от миналото) в комбинация с възхода на технологиите и комуникационната революция – всичко това гние и ерозира почвата на (неолибералната) демокрация много преди Доналд Тръмп да се появи на сцената.
В подобни моменти, в които става ясно, че цялостната система буксува, е въпрос на време коя от „традиционните“ партии ще изчезне първа. Подобни политически турбуленции има и в късния XIX век в Европа, преди появата на т.нар. масови партии, от които се зараждат съвременните леви и десни движения. Индустриализацията, както и революцията в комуникациите и транспорта водят до зараждането на нови идеологии и до потребността от нови политически сили, които да представляват работниците и интересите на бизнеса – съответно леви (като лейбъристите във Великобритания, чието име буквално идва от глагола за работа и труд) и десни.
В епохата на технологична революция сме свидетели на подобни процеси: във Франция първо се сринаха левите партии, след това през 2017 г. центристкото движение на Макрон издърпа електорат и отляво, и отдясно, а на последните избори дясното срина границата между център и крайнодясно. Какво ще запълни вакуума, предстои да разберем. Първите знаци за този процес в САЩ са към 2010 г. в консервативната партия, в която се появяват наченки на реакционерски движения. През 2024 г. партията е много по-различна идеологически и много по-близо до тази политика на реакцията, отколкото преди десетина години – именно поради посочените процеси.
Сега е ред на демократите. В почти всеки от ключовите райони Харис не успява да подобри постигнатото от Байдън и дори губи гласоподаватели, обратно на Тръмп. Подобни мащабни тенденции не могат да бъдат редуцирани до проблеми с кандидатите или кампанията, защото кампанията на Харис беше на много високо ниво и усърдно се избягваха по-противоречиви похвати, като например да се залага на политиката на идентичностите.
Проблемът е другаде – вероятно в посланията и в призивите на демократите за връщане на уважението и умереността спрямо статукво, което вече не работи в полза на средната класа и на средностатистическия гласуващ: той не вижда успешната икономика, справедливите институции и прекрасните плодове на демокрацията, независимо колко го убеждават в тях политиците, експертите и медиите. Това се дължи отчасти на факта, че в САЩ политиците, експертите и журналистите все повече съществуват в изолирани балони или са част от икономически и културни елити, което налива масло в огъня на отровния популизъм.
Победата на Тръмп също е пирова, защото е слабо вероятно той да е спасителят, на когото избирателите се надяват. Идеолозите на Тръмп се опитват да го превърнат в нещо повече от протестен вот или идол на определена демография, но политическите му реформи не станаха реалност по време на първия мандат и е слабо вероятно да доведат до мир и просперитет по време на втория. Специалисти по икономика сочат, че дефицитът и бюджетът ще се раздуят по различни начини от демократите и републиканците, но със сигурност нито ще се свият, нито е възможно завръщане към икономиката на миналото в света на настоящето.
Външнополитически Тръмп се очертава като бедствие във време на зараждащи се световни конфликти. Въпросът е коя партия ще бъде реформирана из основи първа и как – дали демократите ще бъдат достатъчно смели действително да се изправят срещу дефицитите в системата, преди републиканците да я доизкривят в своя полза, и колко ще продължи агонията на идеологиите на миналото и на опита да се прилагат в бъдещето. Не е ясно и как е възможно да се постигне относително изравняване в общество с все по-големи неравенства без тежки кризи и катаклизми.
Какво е Америка?
Американският вътрешен срив има своите външни еквиваленти най-вече за световния ред, който след 1945 г. разчита на САЩ като хегемон и водач на свободния свят. САЩ триумфират във Втората световна война и помагат за възстановяването на Европа. Така пишат героичната история, която днес все още се разказва с патос и се е превърнала в основен символ за западните ни общества, носейки със себе си определен набор от ценности и клишета.
Този патос обаче пречи както на САЩ, така и на Европа да поставят под въпрос идеята за абсолютен героизъм и доброта у държава, която например изпраща свои несвободни чернокожи (формално) граждани на фронтовете без десегрегация, след което им отказва помощите и привилегиите на ветераните, прибрали се у дома като герои. Забравена е и историята, че преди японците да атакуват Пърл Харбър, американците са изключително разделени относно участието на САЩ в световния конфликт. Традиционният за страната изолационизъм се проявява в анкетите от онова време: към януари 1940 г. 88% от американците считат, че Америка изобщо не трябва да се намесва в европейския конфликт и да застава срещу Хитлер. През юни 1940 г. само 35% смятат, че американците трябва да рискуват живота си, за да помогнат на британците. Нацизмът има множество последователи в САЩ по онова време (и така до днес).
В навечерието на Втората световна война в САЩ действа законът за имиграционните квоти, който е наложен преди Голямата депресия и допълнен след нея. През 1939 г. квотата за имигранти от Германия е 27 370 души. Над 300 000 германски граждани, повечето от еврейски произход, подават документи за емиграция година по-рано. Одобрени са малко над 20 000. Освен това САЩ отказват визи на емигранти, които могат да бъдат в тежест на социалната система. Това се оказва проблемно за евреите, чието имущество е отнето от нацистите, тоест често остават без всякакъв финансов ресурс. Когато Франсис Пъркинс, секретар на труда в кабинета на Рузвелт, предлага президентът да издаде указ, за да се улесни влизането на бежанци, които са преследвани поради расови или религиозни причини, кабинетът се противопоставя, за да не създаде напрежение в отношенията между САЩ и Германия, както и да не предизвика гнева на безработните американци.
Можем да разкажем всичко това и още много не с цел да представим нещата в черно-бяла светлина, а именно за да избягаме от черно-белите митове на Студената война, които умират грозно пред очите ни. Защото Америка е била герой. Но е била и злодей – същият злодей, в когото сега не можем да повярваме.
САЩ са изградени от противоречия, които никога не са си отивали. От една страна, имаме красотата на демокрацията, възможностите, свободата, равенството. От друга – жестокостта, която прави тази красота възможна: колониализмът, геноцидът, робството, окупацията и войната. Докато това противоречие не се осмисли и разреши, то ще се връща, а държавата – както и светът – ще бъдат гонени от призрака на първородния грях, който е създал тази държава и все още е част от нея,
написа в профила си във Facebook американо-виетнамският писател Виет Тан Нгуен. И за САЩ, както и за света, е крайно време да се раздели с мита за американската изключителност. В истинския свят митовете, съвършените герои и линейното движение на сюжетa към неминуем прогрес и щастлив край не съществуват. В истинския свят битката за човещина винаги е актуална, поколение след поколение, и никой не е имунизиран нито срещу чуждата жестокост, нито срещу своята собствена.
И сега?
Демократката Сара Макбрайд беше избрана и е първата трансджендър представителка в долната камара. Анди Ким пък е първият американец от корейски произход в долната камара. В референдум (в САЩ по време на изборите може да се гласува по отделни въпроси, предложени на щатско ниво) червеният щат Мисури отхвърли тоталната забрана на абортите и ще узакони правото на прекратяване на бременността. Другото предложение в Мисури, което също бе прието, е увеличаване на минималната работна заплата на 15 долара на час – и двете са мерки и политики на демократите и това, че се приемат в традиционно червени щати, със сигурност е добър знак.
Аризона, Невада, Колорадо и Монтана също ще защитят правото на аборт след подобни инициативи, както Ню Йорк и Мериленд, където такива мерки са по-скоро очаквани. Във Флорида т.нар. Четвърта поправка имаше същата цел и получи по-голяма подкрепа – 57% в полза на узаконяването, но не беше преминат прагът от 60%, необходим за приемането на закон. Правото на аборт се очертава като втория най-наболял проблем за повечето американци след икономиката и това се отрази и на посланията. Голяма част от усилията на кампанията на Тръмп бяха насочени към убеждаване на жените, че той не им е враг – въпреки отвратителната реторика спрямо жените, която бъдещият президент и негови подчинени си позволяват. Самият Тръмп отхвърли федерална забрана на абортите – нещо, което евангелското и религиозното крило на Републиканската партия трудно ще преглътне.
Защо думите вече нямат значение? Вероятно защото повечето хора не смятат, че са подкрепени с действия. Пред политиците, които обещават и не правят нищо (например демократите имаха десетилетия, за да защитят правото на аборт, тъй като беше ясно, че „Роу срещу Уейд“ не е достатъчно като решение), избирателите предпочетоха онези, които престъпват всякакви норми и не уважават традицията, но поне „казват нещата така, както са“ (аргумент на гласуващите за Тръмп). Изборът на Тръмп не е знак, че американците са неморални и отвратителни хора (както Хилари Клинтън нарече избирателите на Тръмп deplorables). Той е сигнал за бунт, революция и промяна, както знае всеки, който може да издържи да слуша революционния и патриотичен патос на алтернативните консервативни медии.
За журналистите и медиите, които все още не смятат всеки републикански гласоподавател за deplorable, е ясно, че в живия живот повечето републиканци не са расисти, сексисти или ксенофоби, нито считат, че техните кандидати подкрепят това – точно обратното. Ако човек се задълбочи в аргументацията (независимо колко пробита е тя на моменти и колко си противоречи с реални действия и думи), ще чуе, че всъщност републиканците твърдят, че правят същото като демократите: грижат се за малкия човек, независимо от неговия пол, религия и вероизповедание, пазят свободата на словото и спасяват нацията си от демократите, които са фашисти и комунисти.
Няма време за сълзи
Добрата новина е и лошата новина – този когнитивен дисонанс и племенно мислене означават, че светът на миналото си отива. Историческото изключение на добрия победител във Втората световна война, на социалната държава на 60-те и на просперитета на Америка в сравнение с разрушената Европа и света приключва. Америка може би ще бъде велика отново, но никога вече така – най-малкото защото това е невъзможно и светът е друг.
Важният въпрос е как ще си отиде миналото, какво и колко ще помете по пътя си. Ще предизвика ли Тръмп трета световна война, въпреки че е избран с празните обещания, че ще я прекрати? Надяваме се, че не. Ще се сбъднат ли най-страшните пророчества и ще се превърне ли САЩ в неофашистка автокрация? Надали. Но няма и нужда – капиталът и без това решава политиката в страната, в която Върховният съд отдавна взе решение парите да се третират като свобода на словото и съответно политиката да минава през неизбрани свръхбогаташи и корпорации, на които законите гледат като на лица с права или най-добре като на донори на луксозни ваканции и каравани (както е в случая с един от върховните съдии). И преди сме писали, че по линия на всички тези проблеми републиканците и демократите мислят еднакво. В най-добрия случай скоро ще го разберат.
Едно от неофициалните обещания на Доналд Тръмп е да даде на Илън Мъск контрол над държавния апарат, който най-богатият човек в света (но иначе представящ се за антиелит и аутсайдер) да може да употреби за собствени цели. В идеите за по-малко или повече държава вече вярват само хора, които изпитват облекчение да водят спорове за миналото, защото реалността е непоносима. Държава ще има, и то много – въпросът е на кого и как ще служи, както и кой ще бъде подчинен и до каква степен. Това е колкото дистопично, толкова и вероятно, и точно толкова въпрос на формалност – със или без Тръмп, това е реалността, в която бавно се сваряваме, защото институциите буксуват както в САЩ, така и в ЕС и отвъд (само преди дни стартира нова журналистическа инициатива, която цели да изложи на показ корупцията и липсата на прозрачност в ЕС, където финансовите интереси също все по-често диктуват политиката).
Независимо от резултата на 5 ноември, половината от една държава – а и от един свят – щеше да се събуди с усещането, че светът свършва. И това не е плод на един политик, една идеология и едни избори, а на средата и времената ни, на процеси, много по-големи от нас. В крайна сметка всеки диктатор е левиатан, направен от всички, които го подкрепят. Но светът все още е тук. Засега. И какво друго остава на всеки от нас, освен да се бори – достойно и по възможност човешки – за онова, в което вярва? Не слушайте мен, чуйте Джон Стюарт. И дишайте. Няма време за сълзи.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.