[$] Giving Rust a chance for in-kernel codecs

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

Video playback is undeniably one of the most important features in modern
consumer devices. Yet, surprisingly, users are by and large unaware of the
intricate engineering involved in the compression and decompression of
video data, with codecs being left to find a delicate balance between image
quality, bandwidth, and power consumption. In response to constant
performance pressure, video codecs have become complex and hardware
implementations are now common, but programming these devices is becoming
increasingly difficult and fraught with opportunities for exploitation. I
hope to convey how Rust can help fix this problem.

[$] Support for the TSO memory model on Arm CPUs

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

At the CPU level, a memory model describes, among other things, the amount
of freedom the processor has to reorder memory operations. If low-level
code does not take the memory model into account, unpleasant surprises are
likely to follow. Naturally, different CPUs offer different memory models,
complicating the portability of certain types of concurrent software. To
make life easier, some Arm CPUs offer the ability to emulate the x86 memory
model, but efforts to make that feature available in the kernel are running
into opposition.

Security updates for Friday

Post Syndicated from daroc original https://lwn.net/Articles/971289/

Security updates have been issued by Debian (knot-resolver, pdns-recursor, and putty), Fedora (xen), Mageia (editorconfig-core-c, glibc, mbedtls, webkit2, and wireshark), Oracle (buildah), Red Hat (buildah and yajl), Slackware (libarchive), SUSE (dcmtk, openCryptoki, php7, php74, php8, python-gunicorn, python-idna, qemu, and thunderbird), and Ubuntu (cryptojs, freerdp2, nghttp2, and zabbix).

Build APIs using OpenAPI, the AWS CDK and AWS Solutions Constructs

Post Syndicated from Biff Gaut original https://aws.amazon.com/blogs/devops/build-apis-using-openapi-the-aws-cdk-and-aws-solutions-constructs/

Introduction

APIs are the key to implementing microservices that are the building blocks of modern distributed applications. Launching a new API involves defining the behavior, implementing the business logic, and configuring the infrastructure to enforce the behavior and expose the business logic. Using OpenAPI, the AWS Cloud Development Kit (AWS CDK), and AWS Solutions Constructs to build your API lets you focus on each of these tasks in isolation, using a technology specific to each for efficiency and clarity.

The OpenAPI specification is a declarative language that allows you to fully define a REST API in a document completely decoupled from the implementation. The specification defines all resources, methods, query strings, request and response bodies, authorization methods and any data structures passed in and out of the API. Since it is decoupled from the implementation and coded in an easy-to-understand format, this specification can be socialized with stakeholders and developers to generate buy-in before development has started. Even better, since this specification is in a machine-readable syntax (JSON or YAML), it can be used to generate documentation, client code libraries, or mock APIs that mimic an actual API implementation. An OpenAPI specification can be used to fully configure an Amazon API Gateway REST API with custom AWS Lambda integration. Defining the API in this way automates the complex task of configuring the API, and it offloads all enforcement of the API details to API Gateway and out of your business logic.

The AWS CDK provides a programming model above the static AWS CloudFormation template, representing all AWS resources with instantiated objects in a high-level programming language. When you instantiate CDK objects in your Typescript (or other language) code, the CDK “compiles” those objects into a JSON template, then deploys that template with CloudFormation. I’m not going to spend a lot of time extolling the many virtues of the AWS CDK here, suffice it to say that the use of programming languages such as Typescript or Python rather than the declarative YAML or JSON allows much more flexibility in defining your infrastructure.

AWS Solutions Constructs is a library of common architectural patterns built on top of the AWS CDK. These multi-service patterns allow you to deploy multiple resources with a single CDK Construct. Solutions Constructs follow best practices by default – both for the configuration of the individual resources as well as their interaction. While each Solutions Construct implements a very small architectural pattern, they are designed so that multiple constructs can be combined by sharing a common resource. For instance, a Solutions Construct that implements an Amazon Simple Storage Service (Amazon S3) bucket invoking a Lambda function can be deployed with a second Solutions Construct that deploys a Lambda function that writes to an Amazon Simple Queue Service (Amazon SQS) queue by sharing the same Lambda function between the two constructs. You can compose complex architectures by connecting multiple Solutions Constructs together, as you will see in this example.

Visual representation of how AWS Solutions Constructs build abstractions upon the AWS CDK, which is then compiled into static CloudFormation templates.

Infrastructure as Code Abstraction Layers

In this article, you will build a robust, functional REST API based on an OpenAPI specification using the AWS CDK and AWS Solutions Constructs.

How it Works

This example is a microservice that saves and retrieves product orders. The behavior will be fully defined by an OpenAPI specification and will include the following methods:

Method Functionality Authorization
POST /order Accepts order attributes included in the request body.
Returns the orderId assigned to the new order.
AWS Identity and Access Management (IAM)
GET /order/$(orderId} Accepts an orderId as a path parameter.
Returns the fully populated order object.
IAM

The architecture implementing the service is shown in the diagram below. Each method will integrate with a Lambda function that implements the interactions with an Amazon DynamoDB table. The API will be protected by IAM authorization and all input and output data will be verified by API Gateway. All of this will be fully defined in an OpenAPI specification that is used to configure the REST API.

Displays how the aw-openapigateway-lambda and aws-lambda-dynamodb Solutions constructs combine to deploy the demo by sharing a Lambda function.

The Two Solutions Constructs Making up the Service Architecture

Infrastructure as code will be implemented with the AWS CDK and AWS Solutions Constructs. This example uses 2 Solutions Constructs:

aws-lambda-dynamodb – This construct “connects” a Lambda function and a DynamoDB table. This entails giving the Lambda function the minimum IAM privileges to read and write from the table and providing the DynamoDB table name to the Lambda function code with an environment variable. A Solutions Constructs pattern will create its resources based on best practices by default, but a client can also provide construct properties to override the default behaviors. A client can also choose not to have the pattern create a new resource by providing a resource that already exists.

aws-openapigateway-lambda – This construct deploys a REST API on API Gateway configured by the OpenAPI specification, integrating each method of the API with a Lambda function. The OpenAPI specification is stored as an asset in S3 and referenced by the CloudFormation template rather than embedded in the template. When the Lambda functions in the stack have been created, a custom resource processes the OpenAPI asset and updates all the method specifications with the arn of the associated Lambda function. An API can point to multiple Lambda functions, or a Lambda function can provide the implementation for multiple methods.

In this example you will create the aws-lambda-dynamodb construct first. This construct will create your Lambda function, which you then supply as an existing resource to the aws-openapigateway-lambda constructor. Sharing this function between the constructs will unite the two small patterns into a complete architecture.

Prerequisites

To deploy this example, you will need the following in your development environment:

  • Node.js 18.0.0 or later
  • Typescript 3.8 or later (npm -g install typescript)
  • AWS CDK 2.82.0 or later (npm install -g aws-cdk && cdk bootstrap)

The cdk bootstrap command will launch an S3 bucket and other resources that the CDK requires into your default region. You will need to bootstrap your account using a role with sufficient privileges – you may require an account administrator to complete that command.

Tip – While AWS CDK. 2.82.0 is the minimum required to make this example work, AWS recommends regularly updating your apps to use the latest CDK version.

To deploy the example stack, you will need to be running under an IAM role with the following privileges:

  • Create API Gateway APIs
  • Create IAM roles/policies
  • Create Lambda Functions
  • Create DynamoDB tables
  • GET/POST methods on API Gateway
  • AWSCloudFormationFullAccess (managed policy)

Build the App

  1. Somewhere on your workstation, create an empty folder named openapi-blog with these commands:

mkdir openapi-blog && cd openapi-blog

  1. Now create an empty CDK application using this command:

cdk init -l=typescript

  1. The application is going to be built using two Solutions Constructs, aws-openapigateway-lambda and aws-lambda-dynamodb. Install them in your application using these commands:

npm install @aws-solutions-constructs/aws-openapigateway-lambda

npm install @aws-solutions-constructs/aws-lambda-dynamodb

Tip – if you get an error along the lines of npm ERR! Could not resolve dependency and npm ERR! peer aws-cdk-lib@"^2.130.0", then you’ve installed a version of Solutions Constructs that depends on a newer version of the CDK. In package.json, update the aws-cdk-lib and aws-cdk dependencies to be the version in the peer error and run npm install. Now try the above npm install commands again.

The OpenAPI REST API specification will be in the api/openapi-blog.yml file. It defines the POST and GET methods, the format of incoming and outgoing data and the IAM Authorization for all HTTP calls.

  1. Create a folder named api under openapi-blog.
  2. Within the api folder, create a file called openapi-blog.yml with the following contents:
---
openapi: 3.0.2
info:
  title: openapi-blog example
  version: '1.0'
  description: 'defines an API with POST and GET methods for an order resource'
# x-amazon-* values are OpenAPI extensions to define API Gateway specific configurations
# This section sets up 2 types of validation and defines params-only validation
# as the default.
x-amazon-apigateway-request-validators:
  all:
    validateRequestBody: true
    validateRequestParameters: true
  params-only:
    validateRequestBody: false
    validateRequestParameters: true
x-amazon-apigateway-request-validator: params-only
paths:
  "/order":
    post:
      x-amazon-apigateway-auth:
        type: AWS_IAM
      x-amazon-apigateway-request-validator: all
      summary: Create a new order
      description: Create a new order
      x-amazon-apigateway-integration:
        httpMethod: POST
        # "OrderHandler" is a placeholder that aws-openapigateway-lambda will
        # replace with the Lambda function when it is available
        uri: OrderHandler
        passthroughBehavior: when_no_match
        type: aws_proxy
      requestBody:
        description: Create a new order
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/OrderAttributes"
        required: true
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/OrderObject"
  "/order/{orderId}":
    get:
      x-amazon-apigateway-auth:
        type: AWS_IAM
      summary: Get Order by ID
      description: Returns order data for the provided ID
      x-amazon-apigateway-integration:
        httpMethod: POST
        # "OrderHandler" is a placeholder that aws-openapigateway-lambda will
        # replace with the Lambda function when it is available
        uri: OrderHandler
        passthroughBehavior: when_no_match
        type: aws_proxy
      parameters:
      - name: orderId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/OrderObject"
        '400':
          description: Bad order ID
        '404':
          description: Order ID not found
components:
  schemas:
    OrderAttributes:
      type: object
      additionalProperties: false
      required:
      - productId
      - quantity
      - customerId
      properties:
        productId:
          type: string
        quantity:
          type: integer
          format: int32
          example: 7
        customerId:
          type: string
    OrderObject:
      allOf:
      - "$ref": "#/components/schemas/OrderAttributes"
      - type: object
        additionalProperties: false
        required:
        - id
        properties:
          id:
            type: string

Most of the fields in this OpenAPI definition are explained in the OpenAPI specification, but the fields starting with x-amazon- are unique extensions for configuring API Gateway. In this case x-apigateway-auth values stipulate that the methods be protected with IAM authorization; the x-amazon-request-validator values tell the API to validate the request parameters by default and the parameters and request body when appropriate; and the x-amazon-apigateway-integration section defines the custom integration of the method with a Lambda function. When using the Solutions Construct, this field does not identify the specific Lambda function, but instead has a placeholder string (“OrderHandler”) that will be replaced with the correct function name during the launch.

While the API will accept and validate requests, you’ll need some business logic to actually implement the functionality. Let’s create a Lambda function with some rudimentary business logic:

  1. Create a folder structure lambda/order under openapi-blog.
  2. Within the order folder, create a file called index.js . Paste the code from this file into your index.js file.

Our Lambda function is very simple, consisting of some relatively generic SDK calls to Dynamodb. Depending upon the HTTP method passed in the event, it either creates a new order or retrieves (and returns) an existing order. Once the stack loads, you can check out the IAM role associated with the Lambda function and see that the construct also created a least privilege policy for accessing the table. When the code is written, the DynamoDB table name is not known, but the aws-lambda-dynamodb construct creates an environment variable with the table name that will do nicely:

// Excerpt from index.js
// Get the table name from the Environment Variable set by aws-lambda-dynamodb
const orderTableName = process.env.DDB_TABLE_NAME;

Now that the business logic and API definition are included in the project, it’s time to add the AWS CDK code that will launch the application resources. Since the API definition and your business logic are the differentiated aspects of your application, it would be ideal if the infrastructure to host your application could deployed with a minimal amount of code. This is where Solutions Constructs help – perform the following steps:

  1. Open the lib/openapi-blog-stack.ts file.
  2. Replace the contents with the following:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { OpenApiGatewayToLambda } from '@aws-solutions-constructs/aws-openapigateway-lambda';
import { LambdaToDynamoDB } from '@aws-solutions-constructs/aws-lambda-dynamodb';
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
import * as path from 'path';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as ddb from 'aws-cdk-lib/aws-dynamodb';

export class OpenapiBlogStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // This application is going to use a very simple DynamoDB table
    const simpleTableProps = {
      partitionKey: {
        name: "Id",
        type: ddb.AttributeType.STRING,
      },
      // Not appropriate for production, this setting is to ensure the demo can be easily removed
      removalPolicy: cdk.RemovalPolicy.DESTROY
    };

    // This Solutions Construct creates the Orders Lambda function 
    // and configures the IAM policy and environment variables "connecting" 
    // it to a new Dynamodb table
    const orderApparatus = new LambdaToDynamoDB(this, 'Orders', {
      lambdaFunctionProps: {
        runtime: lambda.Runtime.NODEJS_18_X,
        handler: 'index.handler',
        code: lambda.Code.fromAsset(`lambda/order`),
      },
      dynamoTableProps: simpleTableProps
    });

    // This Solutions Construct creates and configures the REST API,
    // integrating it with the new order Lambda function created by the
    // LambdaToDynamomDB construct above
    const newApi = new OpenApiGatewayToLambda(this, 'OpenApiGatewayToLambda', {
      // The OpenAPI is stored as an S3 asset where it can be accessed during the
      // CloudFormation Create Stack command
      apiDefinitionAsset: new Asset(this, 'ApiDefinitionAsset', {
        path: path.join(`api`, 'openapi-blog.yml')
      }),
      // The construct uses these records to integrate the methods in the OpenAPI spec
      // to Lambda functions in the CDK stack
      apiIntegrations: [
        {
          // These ids correspond to the placeholder values for uri in the OpenAPI spec
          id: 'OrderHandler',
          existingLambdaObj: orderApparatus.lambdaFunction
        }
      ]
    });

    // We output the URL of the resource for convenience here
    new cdk.CfnOutput(this, 'OrderUrl', {
      value: newApi.apiGateway.url + 'order',
    });
  }
}

Notice that the above code to create the infrastructure is only about two dozen lines. The constructs provide best practice defaults for all the resources they create, you just need to provide information unique to the use case (and any values that must override the defaults). For instance, while the LambdaToDynamoDB construct defines best practice default properties for the table, the client needs to provide at least the partition key. So that the demo cleans up completely when we’re done, there’s a removalPolicy property that instructs CloudFormation to delete the table when the stack is deleted. These minimal table properties and the location of the Lambda function code are all you need to provide to launch the LambdaToDynamoDB construct.

The OpenApiGatewayToLambda construct must be told where to find the OpenAPI specification and how to integrate with the Lambda function(s). The apiIntegrations property is a mapping of the placeholder strings used in the OpenAPI spec to the Lambda functions in the CDK stack. This code maps OrderHandler to the Lambda function created by the LambdaToDynamoDB construct. APIs integrating with more than one function can easily do this by creating more placeholder strings.

  1. Ensure all files are saved and build the application:

npm run build

  1. Launch the CDK stack:

cdk deploy

You may see some AWS_SOLUTIONS_CONSTRUCTS_WARNING:‘s here, you can safely ignore them in this case. The CDK will display any IAM changes before continuing – allowing you to review any IAM policies created in the stack before actually deploying. Enter ‘Y’ [Enter] to continue deploying the stack. When the deployment concludes successfully, you should see something similar to the following output:

...

OpenapiBlogStack: deploying... [1/1]

OpenapiBlogStack: creating CloudFormation changeset...
 
 ✅  OpenapiBlogStack
 
✨  Deployment time: 97.78s
 
Outputs:
OpenapiBlogStack.OpenApiGatewayToLambdaSpecRestApiEndpointD1FA5E3A = https://b73nx617gl.execute-api.us-east-1.amazonaws.com/prod/
OpenapiBlogStack.OrderUrl = https://b73nx617gl.execute-api.us-east-1.amazonaws.com/prod/order
Stack ARN:
arn:aws:cloudformation:us-east-1:123456789012:stack/OpenapiBlogStack/01df6970-dc05-11ee-a0eb-0a97cfc33817
 
✨  Total time: 100.07s

Test the App

Let’s test the new REST API using the API Gateway management console to confirm it’s working as expected. We’ll create a new order, then retrieve it.

  • Open the API Gateway management console and click on APIs in the left side menu
  • Find the new REST API in the list of APIs, it will begin with OpenApiGatewayToLambda and have a Created date of today. Click on it to open it.
  • On the Resources page that appears, click on POST under /order.
  • In the lower, right-hand panel, select the Test tab (if the Test tab is not shown, click the arrow to shift the displayed tabs).
  • The POST must include order data in the request body that matches the OrderAttributes schema defined by the OpenAPI spec. Enter the following data in the Request body field:

{
"productId": "prod234232",
"customerId": "cust203439",
"quantity": 5
}

  • Click the orange Test button at the bottom of the page.

The API Gateway console will display the results of the REST API call. Key things to look for are a Status of 200 and a Response Body resembling “{\"id\":\"ord1712062412777\"}" (this is the id of the new order created in the system, your value will differ).

You could go to the DynamoDB console to confirm that the new order exists in the table, but it will be more fun to check by querying the API. Use the GET method to confirm the new order was persisted:

  • Copy the id value from the Response body of the POST call – "{\"id\":\"ord1712062412777\"}"

Tip – select just the text between the \” patterns (don’t select the backslash or quotation marks).

  • Select the GET method under /{orderId} in the resource list. Paste the orderId you copied earlier into the orderId field under Path.
  • Click Test – this will execute the GET method and return the order you just created.

You should see a Status of 200 and a Response body with the full data from the Order you created in the previous step:

"{\"id\":\"ord1712062412777\",\"productId\":\"prod234232\",\"quantity\":\"5\",\"customerId\":\"cust203439\"}"

Let’s see how API Gateway is enforcing the inputs of the API. Let’s go back to the POST method and intentionally send an incorrect set of Order attributes.

  • Click on POST under /order
  • In the lower, right-hand panel, select the Test tab.
  • Enter the following data in the Request body field:

{
"productId": "prod234232",
"customerId": "cust203439",
"quality": 5
}

  • Click the orange Test button at the bottom of the page.

Now you should see an HTTP error status of 400, and a Response body of {"message": "Invalid request body"}.

Note that API Gateway caught the error, not any code in your Lambda function. In fact, the Lambda function was never invoked (you can take my word for it, or you can check for yourself on the Lambda management console).

Because you’re invoking the methods directly from the console, you are circumventing the IAM authorization. If you would like to test the API with an IAM authorized call from a client, this video includes excellent instruction on how to accomplish this from Postman.

Cleanup

To clean up the resources in the stack, run this command:

cdk destroy

In response to Are you sure you want to delete: OpenApiBlogStack (y/n)? you can type y (once again you can safely ignore the warnings here).

Conclusion

Defining your API in a standalone definition file decouples it from your implementation, provides documentation and client benefits, and leads to more clarity for all stakeholders. Using that definition to configure your REST API in API Gateway creates a robust API that offloads enforcement of the API from your business logic to your tooling.

Configuring a REST API that fully utilizes the functionality of API Gateway can be a daunting challenge. Defining the API behavior with an OpenAPI specification, then implementing that API using the AWS CDK and AWS Solutions Constructs, accelerates and simplifies that effort. The CloudFormation template that eventually launched this API is over 1200 lines long – yet with AWS CDK and AWS Solutions Constructs you were able generate this template with ~25 lines of Typescript.

This is just one example of how Solutions Constructs enable developers to rapidly produce high quality architectures with the AWS CDK. At this writing there are 72 Solutions Constructs covering 29 AWS services – take a moment to browse through what’s available on the Solutions Constructs site. Introducing these in your CDK stacks accelerates your development, jump starts your journey towards being well-architected, and helps keep you well-architected as best practices and technologies evolve in the future.

Picture of the author

About the Author

Biff Gaut has been shipping software since 1983, from small startups to large IT shops. Along the way he has contributed to 2 books, spoken at several conferences and written many blog posts. He’s been with AWS for 10+years and is currently a Principal Engineer working on the AWS Solutions Constructs team, helping customers deploy better architectures more quickly.

Въпроси и отговори от институциите относно Мартин Нотариуса

Post Syndicated from Bozho original https://blog.bozho.net/blog/4265

В последните два месеца зададохме с колеги от Да, България (Йорданова, Цонева, Мирчев) над 40 въпроса до институциите относно казусите „Нотариуса“ и „Осемте джуджета“, които са фрапантни примери за зависимоститв в съдебната власт. Публикувам пакет с всички тях, като институциите, които питахме, са: прокуратурата, антикорупционната комисия, МВР, бюрото за контрол на СРС, НАП, Агенция по вписванията, МРРБ, МП, ИВСС, СГС.

Дали тези мрежи са имали връзка с политическо влияние – според мен да, но то няма как да се разкрие от документи. Отказите на някои институции да отговорят (или да отговорят по същество), както и състоянието на нормативмата уредба, създаването и отбранявянето на спец съда според мен са индикации за такова.

От отговорите мога да направя следните обобщения:

  • Институциите крият информация от парламента – от пълния отказ на антикорупционната комисия изобщо да отговаря (след един кратък не-отговор в началото), през старателното криене, в нарушение на закона, от страна на МВР на ролята на Нотариуса като секретен сътрудник, през куриозната интерпретация на прокуратурата на правилника на парламента, самоопределяйки исканията по него като искания по друт нормативем акт, през разширително тълкуване на следственатя тайна, до уклончивите и половинчати отговори на някои въпроси.
  • Има голям проблем със СРС-тата (подслушвания, напр.) – оказа се, че веществени доказателствени средства на база на СРС не се унищожават. Никой няма данни за това колко СРС-та са използвани срещу лица извън досъдебни производства, срещу които след това няма повдигнати обвинения. Сигналите за злоупотреби текат от бюрото за контрол през МП до инспектората на ВСС, който отказва да ги проверява. Нотариуса е бил свидетел по дела и най-вероятно е давал съгласие да бъде записван, което е генеритало големи количества СРС-комромати срещу магистрати (и може би не само)
  • Мрежата на нотариуса може да се проследи надълбоко от институциите, ако имат желание – една малка капка от това е справката, която получихме от Търговския регистър за лица, подавали заявления за вписване по фирми на Нотариуса (там излизат познатите имена от разследването на АКФ, но и други). През НАП може да бъде извадена свързаността и парични потоци от фирмите на Нотариуса (не сме питали за това, защото е данъчна и осигутителна информация). Прави впечатление една ревизия на фирма на Нотариуса по искане по прокуратурата. Дали разследващите органи ще потърсят, ще намерят, и ще използват тази информация за да няма повече такива мрежи, зависи от обществения натиск върху тях.
  • Липсва какъвто и да е външен контрол върху секретните сътрудници на МВР (а и на службите). Видно от отказите да се отговори на всякакви въпроси, писмено и устно, оставя единствения контрол на секретните сътрудници да бъде вътрешен в МВР (от инспектората и дирекция „Вътрешна сигурност“). Правило е на дейностите на репресивните органи да има институционален контрол – има бюро за контрол на СРС, има съдебен контрол за актове на прокуратурата, има парламентарна комисия за контрол на службите. Но няма механизъм, по който да се контролира институционално (а не наказателноправно) злоупотребите със секретните сътрудници – те какви задачи изпълняват, тези задачи имат ли политически или компроматни цели и т.н.
  • Има странни действия от страна на ГДБОП около Осемте джуджета. Първо, материалите по разследването са внесени директно във Върховната касационна прокуратура, а не в първоинстанционните – СГП или специализираната първоинстанционна (към онзи момент). МВР не предостави адекватни мотиви за това действие (опитаха да го обяснят с бъдещо закриване на специзлизираната прокуратура, което към момента на предаването дори не е било качено на обществено обсъждане). След това именно ВКП образува производството (според МВР, макар върховната прокуратура да отказа да ни отговори), което е екзотичен подход (общо 61 такива за 10 години). Второ, арестът на Кристиян Христов е преди той да даде пресконференция, като нямаме отговор дали МВР е получило разпореждането от прокуратурата писмено или е било координирано устно.

От всички тези проблеми следва необходимост от законови промени в следните закони, като ще ги вмесем в началото на следващия парламент:

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

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

Материалът Въпроси и отговори от институциите относно Мартин Нотариуса е публикуван за пръв път на БЛОГодаря.

Пука ли им на политиците за нас?

Post Syndicated from Емилия Милчева original https://www.toest.bg/puka-li-im-na-polititsite-za-nas/

Пука ли им на политиците за нас?

Хората от Брестовица пак протестират срещу негодната за пиене и ползване вода заради високото съдържание на манган. Близки на убития на столична улица 14-годишен Филип и хора от сдружението „Ангели на пътя“ са на пореден протест за справедлива присъда и срещу пуснатия под домашен арест, който го помете с колата си. От Фондация „Даная“ не спират да протестират срещу управата на „Пирогов“ заради съмнения, че момичето е починало поради неглижиране на случая. Екоорганизации протестират срещу промените на ГЕРБ и ДПС в Закона за насърчаване на инвестициите, които осигуряват бърза писта на проекти с огромно екологично въздействие, 15 години валидност на решенията за ОВОС – вместо сегашните пет – и обжалване само на една инстанция.

Докога с лъжите?

Проблемът в Брестовица е поне от пет години, отпреди държавата да влезе в поредица от шест предсрочни вота за три години. От чешмите тече вода, която съдържа до 20 пъти завишено количество манган при норма от 50 микрограма. Хората излизат на протест, боледуват, пак излизат на протест, а регионални министри, областни управители, политици не спират да обещават. Но дори не са се произнесли откъде е манганът – виновен ли е близкият ВЕЦ, друга ли е причината? А 20-те милиона за проекта за нов довеждащ колектор и ВиК мрежа така и не се намират. 

България е първа от 27-те страни в ЕС по брой смъртни случаи при катастрофи за 2023 г. с 82 жертви на един милион случая при средно за Общността 46 на един милион. Българските политици, все едно кои, са неспособни да решат проблема, който се разраства от десетилетия и отнема живота на толкова хора, сред които и деца. 

Детската болница, обещана през 1978-ма и после през 2004 г., все така не помръдва от идеята да я има. А българите от години доплащат най-много за здраве в ЕС, освен че са с най-ниска средна продължителност на живота. 

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

Последните реформи

Политиците лъжат, че ще решат проблемите, а хората проумяват, че на политиците не им пука. Какво виждат гражданите? Самодоволни, самодостатъчни, нечувствителни към социалните проблеми, бюрократизирани и партизирани до крайност персони, бълващи лозунги и декларации вместо истинска политика, боричкащи се политически съперници, устремили се към институционално окопаване… Съешават се в името на компромис(и) и се разделят по избори. Договарят се, скрити от публичното внимание, и се нападат пред камерите и микрофоните. Боят се от реформите, защото ще загубят популярност, гласове и лостове за влияние – затова административната, здравната и образователната реформа са на трупчета, както и съдебната. Обещават децентрализация, но не искат да се лишат от контрола, който им осигурява софиоцентризмът.

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

Затова пък предсрочно – през февруари – 49-тият парламент взе решение да повиши с 25 до 30% и възнагражденията в МВР от 1 януари 2025 г., въвеждайки нов механизъм за изчисляването им. Но МВР си е същото – огромният бюджет се изразходва предимно за заплати, „една прослойка от около 6400 човека на ръководни постове взема и заплата, и пенсия“ (Веселин Вучков по БНР) и корупционните скандали не спират. Предстои и заплатите на военните да нараснат с 30% от догодина. 

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

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

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

Преди поредните избори

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

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

Какво още?

Още.

What’s Up, Home? – Welcome, Zabbix 7.0beta3

Post Syndicated from Janne Pikkarainen original https://blog.zabbix.com/whats-up-home-welcome-zabbix-7-0beta3/27988/

When Zabbix 7.0beta3 got released, I immediately updated my What’s up, home? environment to run it. As usual, the update process was seamless and fast, going through everything in about a minute with my Raspberry Pi 4.

As I updated Zabbix maybe ten minutes ago, these are very real-time impressions of the new version.

The new honeycomb widget

This new honeycomb widget might be useful! Here’s my first try with it, illustrating the reachability status of my IoT devices.

The text shown on widget combs can be modified freely as in the widget advanced config you can put there any Zabbix macro you want.

… or if you are such an eternal child that I am, just put there some static text:

The widget supports the new widget communication framework, so whatever item you click there can then be notified by other widgets on the dashboards, to make the experience more interactive.

Versatile host navigator widget

There’s another new widget in town, and its name is Host Navigator. With it, you can create a widget that groups your hosts with any criteria by their host groups, or tag values, and it looks like this.

If you then add new widgets or modify the existing ones on your dashboard to receive events from the Host Navigator widget, the changes on other widgets will be reflected in real time. You can also group the items by using multiple rules, for example, first by severity and then by host group, as shown below.

Nice for quick browsing!

Many more improvements

Underneath there’s more going on, but these two were the most visible additions. Other than that, new icons, Zabbix can now execute trigger actions much faster than before (apparently previously there was ~4 seconds lag, now it’s capable of acting in about 100 milliseconds if I read the ticket right), PDF reporting and streaming to external systems are not experimental anymore.

Another solid release marching towards the final version of Zabbix 7.0. In my home environment, these beta versions have been perfectly stable for me.

This post was originally published on the author’s page.

The post What’s Up, Home? – Welcome, Zabbix 7.0beta3 appeared first on Zabbix Blog.

В началото на юни „Алеф” награждава победителите в единадесетия литературен конкурс

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

петък 26 април 2024


Стойността на човешкия живот и цената, която нашите предци са били готови да платят за неговото спасяване по време на Холокоста отвори врати към знанията и въображението на над 300…

Ухажорът Йонги-Бонги-Бо

Post Syndicated from Тоест original https://www.toest.bg/uhazhorut-yongi-bongi-bo/

Ухажорът Йонги-Бонги-Бо

I

На брега на Коромандел,
дето тиквите гърмят,
вдън гората, по средата
Йонги-Бонги-Бо живя.
Стол разбрицан, къс от свещ,
кана щърба – тоз младеж
имаше едва това.
Сред гората той живя,
имаше едва това.
Туй беше Йонги-Бонги-Бо,
туй беше Йонги-Бонги-Бо. 

II

Веднъж, когато се помъкна
там, дето тиквите гърмят,
не щеш ли, взе че се натъкна
на куп от камък този път.
И ненадейно чу тогаз
жена с чаровен, топъл глас
с кокошките си да говори.
И под носа си промърмори:
„Ах, лейди Джингли Джоунс това е!
Седи връз камъните, зная!
Ах, лейди Джингли Джоунс това е!“ –
си рече Йонги-Бонги-Бо,
си рече Йонги-Бонги-Бо.

III

„О, Джингли, ти, прекрасна дама!
Там, дето тиквите гърмят,
дали съпруга ще ми станеш?
Тъй уморен ми е духът!
Така самотен аз живея
на този бряг чакълест, див,
самичък веч едва съм жив!
Вземи ме ти, аз в теб съм влюбен,
животът ми ще стане хубав!“
Тъй рече Йонги-Бонги-Бо,
тъй рече Йонги-Бонги-Бо.

IV

„На този бряг във Коромандел
скариди и пореч растат,
и евтини, и изобилни!
Гъмжи от риба този кът!
Вземи угарката от свещ,
и стола също! – със копнеж
той рече. – Щърбавата кана!
Като морето любовта ми
дълбока е! Не ще те мамя!“
Тъй рече Йонги-Бонги-Бо,
тъй рече Йонги-Бонги-Бо. 

V

Тогаз кахърно му отвърна,
обляна цяла в сълзи, тя:
„Ах, жалко, но е невъзможно!
Ах, ти ужасно закъсня!
Аз с радост бих се съгласила…“
(и тук закърши пръсти, милата)
„… но в Англия си имам друг
и той ще стане мой съпруг!
За жалост, Йонги-Бонги-Бо,
за жалост, Йонги-Бонги-Бо!

VI

Той, мистър Джоунс, се казва Хендъл.
Кокошки праща ми оттам,
от Доркинг, право от пазара.
Без него ще е зор голям!
Задръж си стола и свещта,
и щърба кана аз не ща,
но нека дружки сме си още!
Щом Хендъл прати ми кокошки,
на тебе цели три ще дам!
Да знаеш, Йонги-Бонги-Бо,
да знаеш, Йонги-Бонги-Бо! 

VII

Макар и да си толкоз хилав,
но с грамаданска пък глава,
и шапката ти все да хвърка –
да знаеш, че е затова!
Макар и да си тъпоумен,
аз исках да намеря думи,
за да се изразя по-меко…
Та, ще си тръгваш ли полека?
Какво да кажа друго нямам,
остава да се махнеш само!
Това е, Йонги-Бонги-Бо,
това е, Йонги-Бонги Бо!“ 

VIII

По хлъзгавия склон на Мъртъл,
там, дето тиквите гърмят,
наш Йонги-Бонги-Бо си хвана
към тихите морета път.
Зад залив кротко си лежеше
огромна костенурка. Беше
известна с туй, че бързо плава.
Какво на него му остава?
„Ха, ето кой ще ме спаси!
Я ти на гръб ме понеси!“
Тъй рече Йонги-Бонги-Бо,
тъй рече Йонги-Бонги-Бо.

IX

Из океана, що бушува
и кротва се, и се снишава,
със Йонги-Бонги-Бо на гръб
чевръсто костенурка плава.
Към остров Бошен тя го кара
и със движения прастари,
печални, плава, накъдето
потъва слънцето в морето.
„Прощавай, лейди Джингли, сбогом!
Без тебе да живея мога!“ –
тъй пя си Йонги-Бонги-Бо,
тъй пя си Йонги-Бонги-Бо. 

Х 

А на брега на Коромандел
онази дама си остана
и тя за Йонги вечно жали
там, върху купчината камък.
Затуй в нащърбената кана
тя сълзи рони. Отзарана
и камънака там измива,
като със сълзи го облива.
И прегъната на две,
на кокошките реве
тя за Йонги-Бонги-Бо,
тя за Йонги-Бонги-Бо.

Едуард Лиър
Превод от английски Светлана Комогорова – Комата


Едуард Лиър (1812–1888) е английски поет, писател, художник, илюстратор и музикант, автор на няколко популярни сборника с нонсенс стихотворения, разкази и песни. Роден е в Холоуей, Северен Лондон, и е предпоследното от 21 деца на Ан Кларк Скерет и Джеремая Лиър. Известен е най-вече със своите нонсенс поетични и прозаични творби и особено с лимериците – форма, която той популяризира. За произведенията му е характерна изключителната езикова изобретателност. Като музикант е единственият автор на песни по текстове на Алфред Тенисън, чиято музика самият Тенисън е одобрил. Много свои нонсенс текстове също претворява в песни, включително и „Ухажорът Йонги-Бонги-Бо“. Известен е и с това, че се представя с дългите псевдоними Mr Abebika kratoponoko Prizzikalo Kattefello Ablegorabalus Ableborinto phashyph или Chakonoton the Cozovex Dossi Fossi Sini Tomentilla Coronilla Polentilla Battledore & Shuttlecock Derry down Derry Dumps.

Светлана Комогорова – Комата (р. 1968) е преводачка, поетеса, певица и автор на песни. Носителка на Специалната награда „Кръстан Дянков“ (2010) за превода на „Шантарам“ от Грегъри Дейвид Робъртс; номинирана два пъти за наградата „Евроком“ за превод на фантастика, както и за наградата „Христо Г. Данов“ (2005) за превода на „Лед“ от Владимир Сорокин. Много обича Луис Карол, а най-любимите ѝ произведения са „Алиса в страната на чудесата“ и „Алиса в огледалния свят“. Авторка е на два напълно различни превода на двете книги – единият, съвместен със Силвия Вълкова, е публикуван за първи път през 1996 г. от издателство „Дамян Яков“ и оттогава е преиздаван няколко пъти, а другият – през 2022 г. от издателство „Хеликон“. Изпитва подчертано и невъобразимо влечение към нонсенса в литературата и в изкуството изобщо.


Според Екатерина Йосифова „четящият стихотворение сутрин… добре понася другите часове“ от деня. Убедени, че поезията държи умовете ни будни, а сърцата – отворени, в края на всеки месец ви предлагаме по едно стихотворение. Защото и в най-смутни времена доброто стихотворение е добра новина.

Българската „чужбина“ – едно мечтано и непознато място

Post Syndicated from original https://www.toest.bg/bulgarskata-chuzhbina-edno-mechtano-i-nepoznato-myasto/

Българската „чужбина“ – едно мечтано и непознато място

Една от най-интересните теми в практиката и теорията на превода, поне за мен, е

въпросът, свързан с така наречените „непреводими“ думи.

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

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

Ситуацията се усложнява, когато въпросната „непреводима“ дума все още не е придобила универсална разпознаваемост. В тези случаи преводачът има няколко възможни хода: да остави думата, както си е в оригинала, разчитайки, че значението ѝ ще се разбере от контекста (каквато е англоезичната традиция), или да сложи дефиницията ѝ в бележка под линия (каквато е българската); да я обясни с повече думи в самия текст; да я преведе със сходна, макар и не съвсем точна дума, която съществува в приемния език.

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

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

Българският „хляб“ например незадължително се равнява на френския pain, който пък незадължително е еквивалент на индийския „наан“, който пък не е идентичен с ивритския „маца“.

И така нататък. 

Ето защо, когато преди известно време американското онлайн издание Hopscotch Translation ме покани да споделя случай от моята преводаческа практика, като напиша текст за дума, която смятам за непреводима, аз реших – вместо за очевидно „непреводима“ българска дума – да разкажа за понятие, което на пръв поглед има ясен превод и директни еквиваленти на повечето езици. А именно думата „чужбина“.

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

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

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

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

За тях думата „чужбина“ често означава много повече и по-сложни неща от това, което на английски се разбира под abroad и което чисто и просто обозначава намиращото се отвъд физическите граници на България. За много от живелите през комунизма български граждани думата обхваща възвишени идеи за свобода, справедливост и демокрация, но също така служи и като определение за конкретен стандарт на живот и събирателен термин за базисни, но като цяло недостъпни (и съответно силно желани) потребителски стоки, храни, услуги и удобства. 

Именно по време на комунизма понятието „чужбина“, въпреки че съществува в българския език от много по-рано (няма как тук да не споменем Ботевата „тежка чужбина“), заживява нов живот. Както казва Изидора, правейки препратка към Фернандо Песоа, точно в този период чужбина се превръща в

страната фантом […] която вечно е митът, нищото, което е всичко.

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

Ако се вгледаме в етимологията на думата, ще открием, че още в самия си строеж тя съдържа намеци за опасност и враждебност. Коренът ѝ идва от праславянската дума *ťuďь (‘чужди хора’) и служи като основа на цяла поредица от сродни думи, които също притежават „недружелюбна“ конотация, например „чужд“, „чужденец“, а даже и „отчуждение“, както и моя личен фаворит „чуждица“¹.

Интересно е, че докато коренът на „чужбина“, изглежда, почива на някаква субективна емоция и индивидуално възприятие, английските еквиваленти на думата са основани по-скоро върху факти. Етимологията на термина abroad е пространствена, от староанглийското словосъчетание on brede, буквално означаващо „нашир“. Другият възможен превод на „чужбина“ като overseas, който буквално значи „отвъд морето“, очевидно се основава на географски понятия и възприятия².

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

Идеята за „чужбина“ преминава през „Куфарът на брат ми“ като лайтмотив – това не е изненадващо, като се има предвид, че сборникът, чието подзаглавие гласи „Истории за пътя“, е посветен на темите за миграцията, имиграцията и емиграцията. В общо 239-те страници на оригиналната българска версия на книгата думата се появява общо 33 пъти, които включват и няколко необичайни форми: три пъти в множествено число („чужбини“) и веднъж членувана („чужбината“).

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

Първият такъв случай, който и самата Изидора визира в своята рецензия, е в текста на Георги Господинов. Там той споделя преживяване от детството си:

Спомням си как като деца тичахме подир самолетите с брат ми и махахме с ръка. […] Надявахме се един ден да се качим на самолет и да стигнем до държавата Чужбина, макар брат ми да твърдеше, че на картата такава няма.

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

Друг пример, при който преводът на „чужбина“ като abroad не успява да предаде сложността на оригинала съвсем успешно, е в обширното есе на Димитър Камбуров, в която думата се споменава цели 21 пъти. Имайки предвид тази забележителна честота, както и факта, че и четирите граматически изключения, споменати малко по-горе, се появяват точно в този текст, може да предположим, че за Камбуров думата „чужбина“ е интелектуално понятие, а даже и екзистенциално състояние, много по-обширно, дълбоко и концептуално от това, което abroad сигнализира просто като място, разположено отвъд границите на родната му страна. И докато за Господинов „Чужбина“ е чужда страна, то „чужбините“ на Камбуров често се отъждествяват с жени.

В един забележителен пасаж от неговия текст думата се появява три пъти в непосредствена близост, паралелно с една „чужденка“, която се оказва и „чужда жена“:

… стипендията ми в Будапеща се случи съвършено друг вид чужбина. Чужбина като чужденка. Чужбина като чужда жена.

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

… my fellowship in Budapest became a completely different type of foreign country. A foreign country like a foreign woman. A foreign country like another man’s woman.

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

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

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

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

В английската си версия съм предала mi primera noción del extranjero на Вилянуева и „първата ми идея за „чужбина“ на Мичева като my first notion of “abroad”. Даже несъзнателно съм репродуцирала решението на Нева Мичева допълнително да акцентира върху „чужбина“ като концептуално понятие, поставяйки думата в кавички, които всъщност липсват в оригинала.

Ако съдим по това дали успешно предава смисъла на оригинала, преводът ми е съвсем приемлив. Обръщайки се с нов поглед към него сега обаче, съжалявам, че дори не съм обмислила като потенциално решение да използвам испанската думата extranjero в английската версия. Това би било начин да се запази следа от езика, на който текстът е бил написан първоначално, но също така би осветило концептуалната връзка между испанското extranjero и българската „чужбина“, тъй като – за разлика от abroad – и двете думи споделят идеята за чуждост/странност в корените си.

Сега също така забелязвам, че Вилянуева описва първата си noción del extranjero като un lugar soñado y desconocido, което Нева Мичева превежда по-поетично като „мечтано и невиждано място“, а аз – по-буквално като a dreamed-of and unknown place, тоест „мечтано и непознато място“. Тези описания са особено ценни – не само защото успяват да предадат значението на самата дума, но и защото идеално изразяват невъзможността тя да се преведе от един език на друг еднозначно.

1 Идеята за враждебност се е промъкнала и в лингвистиката. Според българските тълковни речници чуждицата е „ненужно заета дума от чужд език, която има съответствие в родния“. Когато обаче става дума за използване на чужда дума без съществуващ еквивалент в българския, се използва терминът „заемка“, който е сходен и с английското понятие loan word, буквално „заета дума“. Друг подход към въвеждането на чужди думи е така наречената „калка“ – по ирония на съдбата заета от френски (calque ‘копирна хартия’), – която означава дума или израз, заети от друг език чрез буквално превеждане („копиране“) дума по дума или корен по корен. Хубав пример за двете понятия е случаят с немската дума Schadenfreude, която се използва на английски, без да се превежда, докато на български съществува като „злорадство“.

2 Любопитно е, че английско-българските речници предлагат „чужбина“ като превод на думата overseas, а българско-английските не предлагат overseas като превод на „чужбина“. В този контекст си струва да помислим върху начина, по който историята и географията на местата, откъдето двете думи произлизат, се е отпечатал върху тяхната етимология. Произходът на думата overseas вероятно е свързан с факта, че Великобритания е остров – появата на термина в края на XVI век напълно съвпада, със сигурност неслучайно, с началото на британския колониализъм, а по време на Първата световна война думата overseas придобива популярност като евфемизъм за „колониален“. В контраст с това, както свидетелства споменатото по-горе стихотворение на Христо Ботев „На прощаване в 1868 г.“, за българите „чужбина“ се намира точно от другата страна на Дунава.


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