Security updates for Monday

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

Security updates have been issued by Debian (awstats, chromium, clamav, g810-led, giflib, http-parser, jhead, libpgjava, node-cached-path-relative, node-fetch, and vlc), Fedora (fastnetmon, kernel, librime, qpress, rr, thunderbird, and wireshark), Red Hat (kernel, kernel-rt, and kpatch-patch), Slackware (mozilla), SUSE (cherrytree and chromium), and Ubuntu (libbpf, libxml2, linux-gcp-5.15, linux-gke, linux-gke-5.15, and linux-gke).

Какво се случи с Изборния кодекс и машинното гласуване

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

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

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

  1. Внасяне – БСП внасят законопроекта на първия работен ден на Народното събрание (19.10). Ден по-късно Възраждане внасят техен законопроект. В понеделник, 31.10, когато излиза дневния ред на правната комисия и в него присъстват Изборния кодекс, аз и Ивайло Мирчев внасяме нашите изменения за повишаване на доверието в машинното гласуване, за да може да се гледат едновременно, както е по правилник. Атанасова (ГЕРБ) спекулираше в един свой статус, че и ние сме били бързали с Изборния кодекс и затова сме внесли изменения, но ние реагирахме на тяхното бързане.
  2. Първо гласуване в комисии – комисията по правни въпроси е водеща и след нейното заседание е възможно да се разглежда в пленарна зала. Още преди да бъде приет от правна комисия, Изборният кодекс е включен в дневния ред за пленарното заседание, като нито една от другите комисии, на които е разпределен, не стига до това да гледа законопроекта. Не е дадено време и за становища на заинтересовани организации.
  3. Първо гласуване – проектът е приет, като веднага след това е даден съкратен срок за предложения между двете гласувания. В зала аргументите са „дайте само да дадем възможност да се гласува и с хартия, какво толкова“, което след това се оказва прах в очите, тъй като хартиената коалиция премахва машинното преброяване. На първо гласуване е приет и законопроектът на Демократична България, като ГЕРБ гласува „против“, което не кореспондира със заявките им, че искат повече гаранции за машинното гласуване. Накрая на дебата колегата Мирчев взема думата, за да обяви, че тъй като явно мнозинството ще връща хартията, ние ще предложим преброителни центрове, които да решат проблемите с преброяването и отчитането на резултат от секционните комисии
  4. Предложения между двете гласувания – между двете гласувания има 5 групи предложения. На ГЕРБ за премахване на машинното броене; пак на ГЕРБ за осакатяване на разнообразни права по кодекса, в т.ч. район Чужбина, откриване на секции в чужбина, закриване на обществен съвет, прекратяване на дистанционно електронно гласуване; на ДПС за въвеждане на оптични скенери и връщане на 100% хартия; на ДБ за въвеждане на преброителни центрове; на ПП по много на брой теми, някои от които свързани с хартия и машини, а други – не.
  5. Правна комисия – веднага след изтичането на срока, правна комисия провежда 18-часово заседание, продължило цяла нощ и завършило сутринта след изгрев слънце. Предложения, които не са в обхвата на приетите на първо гласуване, са подложени на гласуване, което противоречи на правилника. Предложено е създаване на работна група (от колегите от ПП), която мнозинството отхвърля. БСП гласуват против собствените си текстове, като вместо това подкрепят текстовете, предложени от ГЕРБ. Аргументът на мнозинството, че „и вие миналата година така погазихте правилата“ не издържат – миналата година между първо и второ гласуване не беше приемано нищо извън първоначалния обхват.
  6. Дискусия преди пленарна зала – след заседанието на правна комисия и вкарването на точката в пленарна зала, от ДБ и ПП обявяваме, че искаме всички предложения да бъдат обсъдени експертно в структуриран формат – временна комисия, която да изследва всички варианти и да представи доклад, който да помогне на депутатите да вземат решение. В проекта на дневен ред на такава комисия има одит на машините, изслушване на ЦИК и МЕУ, проучване на оптични скенери и тяхната приложимост и др. Въпреки, че малко преди това Борисов заявява, че няма проблем седмица-две да поработи такава комисия, мнозинството (вкл. ГЕРБ) я отхвърля (дори не е внесена за гласуване от председателя). Диалогът е отказан, отново без аргументи (притеснението на мнозинството е, че целта ни е да забавим приемането на кодекса, който те искат да приемат „с 200“)
  7. Второ гласуване – второто гласуване в зала произвежда редица абсурдни скандали, като в крайна сметка, въпреки заявките, че „машинното гласуване остава“ и въпреки, че ГЕРБ отричат, че ще се маха машинния протокол, всичко машинно, освен принтера е премахнато. Флашката остава, но никой няма достъп до нея, а всички предложения тя да се свали в РИК, да се публикува от ЦИК или машинния протокол да се приложи към другия протокол, са отхвърлени. Ще се броят разписки (превърнати в „бюлетина за машинно гласуване“ чрез защитена хартия), а машината няма да брои. Достъп до флашките на практика ще има след съдебно обжалване на резултат (или ако ЦИК прояви инициатива, което при блокиращата квота на ГЕРБ, ДПС и БСП изглежда невъзможно). В един момент в гласуването се оказва, че ГЕРБ, ДПС и БСП са се разбрали за въвеждане на оптични скенери за местните избори, но бързо след това се отказват. Малко повече за това – по-долу

Ето няколко по-значими теми:

  • Временната комисия – във временната комисия, която предложихме, трябваше да се обсъдят всички спорни моменти и технически детайли, включително избор на дългосрочно решение за изборна технология. Комисията можеше да възложи социологически проучвания на нагласите към различни изборни технологии и да провери опорните точки за доверието в машините (социологията, с която ние разполагаме, казва, че мнозинството от хората имат доверие в машините, с изключение на избирателите на ГЕРБ, които от година и половина се облъчват с конспирации, но дори при тях средното доверие е 5 от 10). Отказът от тази комисия, въпреки заявките за диалог, доведоха до това да се правят съществени редакционни предложения в пленарна зала – много лоша законодателна практика, по известна като „законодателство на колянце“. Доведоха и до продължаващото говорене на неистини за машинното гласуване. Най-важната цел на тази комисия беше да постигне успокояване, след като крехкият диалогичен тон в парламента беше „взривен“ с 18-часовото заседание на правна комисия и газенето на правилата. Дори при проект на дневен ред на комисията, който не би забавил приемането на кодекса, мнозинството не я прие.
  • Преброителните центрове – от ДБ предложихме преброителните центрове като решение на проблема с поправяните протоколи и недействителните бюлетини, които се връщат след връщането на хартията. Нашата теза беше: „като така и така ще връщате хартията, хайде поне да увеличим доверието в отчитането на резултата“. Представихме проекта на всички партии в нарочна среща, като БСП и ГЕРБ взеха думата, за да кажат, че „то това няма как да стане“. Те имаха тази позиция още преди да са видели проекта и детайлите по него, което значеше „ще правим каквото сме си решили“. Пренасянето на запечатани урни, според някои от тях, нямало да възстанови доверието. На това има решение, вкл. видеонаблюдение при транспорт, в допълнение на запечатващите защитени ленти, които предлагахме, но и това не беше обсъдено извън 2-3 кулоарни разговора.
  • Оптичните секенери – ДПС между четенията предложиха оптични скенери. Настрана факта, че такава фундаментална промяна не може и не бива да се предлага между четенията, тя поставя много въпроси, които не могат да бъдат отговорени нито в 6ч сутринта на правна комисия, нито в пленарна зала. В изказване по темата очертах някои от въпросите, без отговори на които не можем да въведем нова технология, въпреки, че тя изглежда приемлива на пръв поглед и може да бъде консенсусна. Но начинът на нейното „промушване“, с някакво съгласие между ГЕРБ, ДПС и БСП, за което останалите разбираме в пленарна зала, с редакционно предложение „чл. 206“ да стане „чл. 206а“, е неприемлив. Въпросите са: дали скенерите ще доведат до смяна на знака и средството за гласуване (Х и V с химикал могат ли да бъдат разпознати с достатъчно високо ниво на точност или трябва да преминем към плътно кръгче с маркер); трябва ли да променим вида на бюлетината – номера на партията да бъде извън квадратчето, за да не обърква скенера; колко пъти ще може скенерът да връща на избирателя невалидна бюлетина и какво става след 2-рия/n-тия път – избирателят си тръгва без да е гласувал или скенерът приема бюлетината с ясната идея, че е невалидна, или се дава възможност с тъчскрийн да се посочи кой е избраният вариант; как се отговаря на същите въпроси, поставени при настоящите машини за изходния код и машинните протоколи – тази машина също брои и трябва да има същите нива на прозрачност, достъп до кода, гаранции за интегритета на данните; броят ли са пуснатите бюлетини, броят ли се контролни разписки (ако има такива), какво става при разминаване между тези две числа и резултата от машинния протокол; дали пъхането на хартия в скенер, който може да ти я върне, е по-удобно и „неплашещо“ за избирателите от машина с тъчскрийн; колко и как да бъде организиран преходния период и експериментите с новата технология. Всички тези въпроси нямаха отговор, а след отказа да бъдат обсъждани в специална комисия, нямаше и как да получат, поради което ние излязохме от зала. След това ГЕРБ и БСП „дадоха заден“ и се върнаха да прегласуват и отхвърлят чл. 206а. Проблемът при този начин на приемане на законодателство е, че имаше риск да „отстреляме“ поредната изборна технология, която иначе има потенциал.
  • Разминаванията в протоколите – от трибуната и ДПС и БСП развяваха протоколи, при които имало разминаване между броенето на разписките и резултата от машината. Това беше изцяло пропагандно усилие, тъй като при дебата в комисия по електронно управление (който се случи след първо четене в зала, и беше критикуван от ГЕРБ, БСП и ДПС, като дори не участваха във втората му част) ЦИК посочиха, че при всички разминавания в минали избори, при повторна проверка се е оказвало, че машината е права, а грешката е в секционната комисия (при броенето или при преписването на машинния протокол, което също се случва). На тези избори повторната проверка на разминаванията още не е направена, но най-вероятно резултатът ще е същия. Още повече, че секциите с такива разминавания са неповече от 20. Проверих една от цитираните секции и се оказа, че в пълния протокол пише, че машината е спряла да работи за кратко и на база на това 2 гласа са признати без нея. В другия случай, в който за ДБ имало 7 гласа според разписките и 77 според машината, става дума за грешно преписване на машинния протокол. Няма нито системен, нито дори локален проблем. Има просто злоупотреба с предварителни данни и внушения. Но най-лошото е, че докато ГЕРБ, ДПС и БСП говорят за разминавания, техните представители в ЦИК гласуват против пълен следизборен одит на разписките. Както на предни избори бяха гласували против предоставяне на изходния код, въпреки законовата разпоредба, приета по предложение на ДБ.
  • Машинните протоколи и флашките – машината вече няма да отпечатва протокол. Не просто той няма да е водещ, а няма да го има дори за справка (за да не го преписват комисиите, имаше идея дори да се отпечатва след определено време от машината, но и това не бе прието). За малко да премахнат и флашката, а с редакционно предложение в зала беше уредено все пак на флашката да се записва нещо (иначе щеше да стои празна). Но мнозинството отказа данните от тази флашка да се свалят в РИК и да се публикуват. Т.е. тя остава скрита. Защо – вносителите и защитниците на това предложение отказаха да го мотивират от трибуната. А съдържанието на флашката е електронно подписано и не може да бъде променяно, без това да се открие в РИК, така че тя е сигурен носител на информация. Смесването на хартиените бюлетини и разпечатките прави машинния протокол (разпечатан или на флашка) по-малко полезен, но все пак полезен за допълнителна контрола. Мнозинството отказа да има такава контрола. Хората, които искат машинно гласуване, вярват именно на машинното отчитане на гласовете, като хартиената коалиция хвърли това в коша.
  • Машинната бюлетина – предвижда се машината да разпечатва избора на защитена хартия, като после машинните бюлетини и хартиените бюлетини се смесват и се броят заедно. Смятаме, че това ще доведе до объркване при броенето, но по-големият проблем е дали машинните принтери ще работят с новата хартия – има изисквания за ширина, дебелина, тежест, а също така трябва да може да бъде перфорирана и сгъвана. Все неща, за които нямаше ясен отговор от вносителите. Все пак, по мое предложение, беше приета преходна разпоредба, с която се задължава ЦИК да стартира експерименти в новата хартия максимално бързо след приемане на закона, за да не се окаже 10 дни преди изборите, че машините не могат да се ползват. Не беше прието моето предложение в правна комисия да се уреди QR кода на разписката като защитна мярка (той също е електронно подписан, т.е. не може отвън да бъдат внесени фалшиви разписки)

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

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

Материалът Какво се случи с Изборния кодекс и машинното гласуване е публикуван за пръв път на БЛОГодаря.

CAPTCHA

Post Syndicated from Bruce Schneier original https://www.schneier.com/blog/archives/2022/12/captcha.html

This is an actual CAPTCHA I was shown when trying to log into PayPal.

As an actual human and not a bot, I had no idea how to answer. Is this a joke? (Seems not.) Is it a Magritte-like existential question? (It’s not a bicycle. It’s a drawing of a bicycle. Actually, it’s a photograph of a drawing of a bicycle. No, it’s really a computer image of a photograph of a drawing of a bicycle.) Am I overthinking this? (Definitely.) I stared at the screen, paralyzed, for way too long.

It’s probably the best CAPTCHA I have ever encountered; a computer would have just answered.

(In the end, I treated the drawing as a real bicycle and selected the appropriate squares…and it seemed to like that.)

A Year-End Letter from our Executive Director

Post Syndicated from Let's Encrypt original https://letsencrypt.org/2022/12/05/ed-letter-2022.html

This letter was originally published in our 2022 annual report.

The past year at ISRG has been a great one and I couldn’t be more proud of our staff, community, funders, and other partners that made it happen. Let’s Encrypt continues to thrive, serving more websites around the world than ever before with excellent security and stability.

A particularly big moment was when Let’s Encrypt surpassed 300,000,000 websites served. When I was informed that we had reached that milestone, my first reaction was to be excited and happy about how many people we’ve been able to help. My second reaction, following on quickly after the first, was to take a deep breath and reflect on the magnitude of the responsibility we have here.

The way ISRG is translating that sense of responsibility to action today is probably best described as a focus on agility and resilience. We need to assume that, despite our best efforts trying to prevent issues, unexpected and unfortunate events will happen and we need to position ourselves to handle them.

Back in March of 2020 Let’s Encrypt needed to respond to a compliance incident that affected nearly three million certificates. That meant we needed to get our subscribers to renew those three million certificates in a very short period of time or the sites might have availability issues. We dealt with that incident pretty well considering the remediation options available, but it was clear that incremental improvements would not make enough of a difference for events like this in the future. We needed to introduce systems that would allow us to be significantly more agile and resilient going forward.

Since then we’ve developed a specification for automating certificate renewal signals so that our subscribers can handle revocation/renewal events as easily as they can get certificates in the first place (it just happens automatically in the background!). That specification is making its way through the IETF standards process so that the whole ecosystem can benefit, and we plan to deploy it in production at Let’s Encrypt shortly. Combined with other steps we’ve taken in order to more easily handle renewal traffic surges, Let’s Encrypt should be able to respond on a whole different level the next time we need to ask significant numbers of subscribers to renew early.

This kind of work on agility and resilience is critical if we’re going to improve security and privacy at scale on the Web.

Our Divvi Up team has made a huge amount of progress implementing a new service that will bring privacy respecting metrics to millions of people. Applications collect all kinds of metrics: some of them are sensitive, some of them aren’t, and some of them seem innocuous but could reveal private information about a person. We’re making it possible for apps to get aggregated, anonymized metrics that give insight at a population level while protecting the privacy of the people who are using those apps. Everybody wins – users get great privacy and apps get the metrics they need without handling individual user data. As we move into 2023, we’ll continue to grow our roster of beta testers and partners.

Our Prossimo project started in 2020 with a clear goal: move security sensitive software infrastructure to memory safe code. Since then, we’ve gotten a lot of code written to improve memory safety on the Internet.

We’re ending the year with Rust support being merged into the Linux kernel and the completion of a memory safe NTP client and server implementation. We’re thrilled about the potential for a more memory safe kernel, but now we need to see the development of drivers in Rust. We’re particularly excited about an NVMe driver that shows excellent initial performance metrics while coming with the benefit of never producing a memory safety bug. We are actively working to make similar progress on Rustls, a high-performance TLS library, and Trust-DNS, a fully recursive DNS resolver.

All of this is made possible by charitable contributions from people like you and organizations around the world. Since 2015, tens of thousands of people have given to our work. They’ve made a case for corporate sponsorship, given through their DAFs, or set up recurring donations, sometimes to give $3 a month. That’s all added up to $17M that we’ve used to change the Internet for nearly everyone using it. I hope you’ll join these people and support us financially if you can.

Ready-to-go sample data pipelines with Dataflow

Post Syndicated from Netflix Technology Blog original https://netflixtechblog.com/ready-to-go-sample-data-pipelines-with-dataflow-17440a9e141d

by Jasmine Omeke, Obi-Ike Nwoke, Olek Gorajek

Intro

This post is for all data practitioners, who are interested in learning about bootstrapping, standardization and automation of batch data pipelines at Netflix.

You may remember Dataflow from the post we wrote last year titled Data pipeline asset management with Dataflow. That article was a deep dive into one of the more technical aspects of Dataflow and didn’t properly introduce this tool in the first place. This time we’ll try to give justice to the intro and then we will focus on one of the very first features Dataflow came with. That feature is called sample workflows, but before we start in let’s have a quick look at Dataflow in general.

Dataflow

Dataflow

Dataflow is a command line utility built to improve experience and to streamline the data pipeline development at Netflix. Check out this high level Dataflow help command output below:

$ dataflow --help
Usage: dataflow [OPTIONS] COMMAND [ARGS]...

Options:
--docker-image TEXT Url of the docker image to run in.
--run-in-docker Run dataflow in a docker container.
-v, --verbose Enables verbose mode.
--version Show the version and exit.
--help Show this message and exit.

Commands:
migration Manage schema migration.
mock Generate or validate mock datasets.
project Manage a Dataflow project.
sample Generate fully functional sample workflows.

As you can see Dataflow CLI is divided into four main subject areas (or commands). The most commonly used one is dataflow project, which helps folks in managing their data pipeline repositories through creation, testing, deployment and few other activities.

The dataflow migration command is a special feature, developed single handedly by Stephen Huenneke, to fully automate the communication and tracking of a data warehouse table changes. Thanks to the Netflix internal lineage system (built by Girish Lingappa) Dataflow migration can then help you identify downstream usage of the table in question. And finally it can help you craft a message to all the owners of these dependencies. After your migration has started Dataflow will also keep track of its progress and help you communicate with the downstream users.

Dataflow mock command is another standalone feature. It lets you create YAML formatted mock data files based on selected tables, columns and a few rows of data from the Netflix data warehouse. Its main purpose is to enable easy unit testing of your data pipelines, but it can technically be used in any other situations as a readable data format for small data sets.

All the above commands are very likely to be described in separate future blog posts, but right now let’s focus on the dataflow sample command.

Sample workflows

Dataflow sample workflows is a set of templates anyone can use to bootstrap their data pipeline project. And by “sample” we mean “an example”, like food samples in your local grocery store. One of the main reasons this feature exists is just like with food samples, to give you “a taste” of the production quality ETL code that you could encounter inside the Netflix data ecosystem.

All the code you get with the Dataflow sample workflows is fully functional, adjusted to your environment and isolated from other sample workflows that others generated. This pipeline is safe to run the moment it shows up in your directory. It will, not only, build a nice example aggregate table and fill it up with real data, but it will also present you with a complete set of recommended components:

  • clean DDL code,
  • proper table metadata settings,
  • transformation job (in a language of choice) wrapped in an optional WAP (Write, Audit, Publish) pattern,
  • sample set of data audits for the generated data,
  • and a fully functional unit test for your transformation logic.

And last, but not least, these sample workflows are being tested continuously as part of the Dataflow code change protocol, so you can be sure that what you get is working. This is one way to build trust with our internal user base.

Next, let’s have a look at the actual business logic of these sample workflows.

Business Logic

There are several variants of the sample workflow you can get from Dataflow, but all of them share the same business logic. This was a conscious decision in order to clearly illustrate the difference between various languages in which your ETL could be written in. Obviously not all tools are made with the same use case in mind, so we are planning to add more code samples for other (than classical batch ETL) data processing purposes, e.g. Machine Learning model building and scoring.

The example business logic we use in our template computes the top hundred movies/shows in every country where Netflix operates on a daily basis. This is not an actual production pipeline running at Netflix, because it is a highly simplified code but it serves well the purpose of illustrating a batch ETL job with various transformation stages. Let’s review the transformation steps below.

Step 1: on a daily basis, incrementally, sum up all viewing time of all movies and shows in every country

WITH STEP_1 AS (
SELECT
title_id
, country_code
, SUM(view_hours) AS view_hours
FROM some_db.source_table
WHERE playback_date = CURRENT_DATE
GROUP BY
title_id
, country_code
)

Step 2: rank all titles from most watched to least in every county

WITH STEP_2 AS (
SELECT
title_id
, country_code
, view_hours
, RANK() OVER (
PARTITION BY country_code
ORDER BY view_hours DESC
) AS title_rank
FROM STEP_1
)

Step 3: filter all titles to the top 100

WITH STEP_3 AS (
SELECT
title_id
, country_code
, view_hours
, title_rank
FROM STEP_2
WHERE title_rank <= 100
)

Now, using the above simple 3-step transformation we will produce data that can be written to the following Iceberg table:

CREATE TABLE IF NOT EXISTS ${TARGET_DB}.dataflow_sample_results (
title_id INT COMMENT "Title ID of the movie or show."
, country_code STRING COMMENT "Country code of the playback session."
, title_rank INT COMMENT "Rank of a given title in a given country."
, view_hours DOUBLE COMMENT "Total viewing hours of a given title in a given country."
)
COMMENT
"Example dataset brought to you by Dataflow. For more information on this
and other examples please visit the Dataflow documentation page."
PARTITIONED BY (
date DATE COMMENT "Playback date."
)
STORED AS ICEBERG;

As you can infer from the above table structure we are going to load about 19,000 rows into this table on a daily basis. And they will look something like this:

 sql> SELECT * FROM foo.dataflow_sample_results 
WHERE date = 20220101 and country_code = 'US'
ORDER BY title_rank LIMIT 5;

title_id | country_code | title_rank | view_hours | date
----------+--------------+------------+------------+----------
11111111 | US | 1 | 123 | 20220101
44444444 | US | 2 | 111 | 20220101
33333333 | US | 3 | 98 | 20220101
55555555 | US | 4 | 55 | 20220101
22222222 | US | 5 | 11 | 20220101
(5 rows)

With the business logic out of the way, we can now start talking about the components, or the boiler-plate, of our sample workflows.

Components

Let’s have a look at the most common workflow components that we use at Netflix. These components may not fit into every ETL use case, but are used often enough to be included in every template (or sample workflow). The workflow author, after all, has the final word on whether they want to use all of these patterns or keep only some. Either way they are here to start with, ready to go, if needed.

Workflow Definitions

Below you can see a typical file structure of a sample workflow package written in SparkSQL.

.
├── backfill.sch.yaml
├── daily.sch.yaml
├── main.sch.yaml
├── ddl
│ └── dataflow_sparksql_sample.sql
└── src
├── mocks
│ ├── dataflow_pyspark_sample.yaml
│ └── some_db.source_table.yaml
├── sparksql_write.sql
└── test_sparksql_write.py

Above bolded files define a series of steps (a.k.a. jobs) their cadence, dependencies, and the sequence in which they should be executed.

This is one way we can tie components together into a cohesive workflow. In every sample workflow package there are three workflow definition files that work together to provide flexible functionality. The sample workflow code assumes a daily execution pattern, but it is very easy to adjust them to run at different cadence. For the workflow orchestration we use Netflix homegrown Maestro scheduler.

The main workflow definition file holds the logic of a single run, in this case one day-worth of data. This logic consists of the following parts: DDL code, table metadata information, data transformation and a few audit steps. It’s designed to run for a single date, and meant to be called from the daily or backfill workflows. This main workflow can also be called manually during development with arbitrary run-time parameters to get a feel for the workflow in action.

The daily workflow executes the main one on a daily basis for the predefined number of previous days. This is sometimes necessary for the purpose of catching up on some late arriving data. This is where we define a trigger schedule, notifications schemes, and update the “high water mark” timestamps on our target table.

The backfill workflow executes the main for a specified range of days. This is useful for restating data, most often because of a transformation logic change, but sometimes as a response to upstream data updates.

DDL

Often, the first step in a data pipeline is to define the target table structure and column metadata via a DDL statement. We understand that some folks choose to have their output schema be an implicit result of the transform code itself, but the explicit statement of the output schema is not only useful for adding table (and column) level comments, but also serves as one way to validate the transform logic.

.
├── backfill.sch.yaml
├── daily.sch.yaml
├── main.sch.yaml
├── ddl
│ └── dataflow_sparksql_sample.sql
└── src
├── mocks
│ ├── dataflow_pyspark_sample.yaml
│ └── some_db.source_table.yaml
├── sparksql_write.sql
└── test_sparksql_write.py

Generally, we prefer to execute DDL commands as part of the workflow itself, instead of running outside of the schedule, because it simplifies the development process. See below example of hooking the table creation SQL file into the main workflow definition.

      - job:
id: ddl
type: Spark
spark:
script: $S3{./ddl/dataflow_sparksql_sample.sql}
parameters:
TARGET_DB: ${TARGET_DB}

Metadata

The metadata step provides context on the output table itself as well as the data contained within. Attributes are set via Metacat, which is a Netflix internal metadata management platform. Below is an example of plugging that metadata step in the main workflow definition

     - job:
id: metadata
type: Metadata
metacat:
tables:
- ${CATALOG}/${TARGET_DB}/${TARGET_TABLE}
owner: ${username}
tags:
- dataflow
- sample
lifetime: 123
column_types:
date: pk
country_code: pk
rank: pk

Transformation

The transformation step (or steps) can be executed in the developer’s language of choice. The example below is using SparkSQL.

.
├── backfill.sch.yaml
├── daily.sch.yaml
├── main.sch.yaml
├── ddl
│ └── dataflow_sparksql_sample.sql
└── src
├── mocks
│ ├── dataflow_pyspark_sample.yaml
│ └── some_db.source_table.yaml
├── sparksql_write.sql
└── test_sparksql_write.py

Optionally, this step can use the Write-Audit-Publish pattern to ensure that data is correct before it is made available to the rest of the company. See example below:

      - template:
id: wap
type: wap
tables:
- ${CATALOG}/${DATABASE}/${TABLE}
write_jobs:
- job:
id: write
type: Spark
spark:
script: $S3{./src/sparksql_write.sql}

Audits

Audit steps can be defined to verify data quality. If a “blocking” audit fails, the job will halt and the write step is not committed, so invalid data will not be exposed to users. This step is optional and configurable, see a partial example of an audit from the main workflow below.

         data_auditor:
audits:
- function: columns_should_not_have_nulls
blocking: true
params:
table: ${TARGET_TABLE}
columns:
- title_id
…

High-Water-Mark Timestamp

A successful write will typically be followed by a metadata call to set the valid time (or high-water mark) of a dataset. This allows other processes, consuming our table, to be notified and start their processing. See an example high water mark job from the main workflow definition.

      - job:
id: hwm
type: HWM
metacat:
table: ${CATALOG}/${TARGET_DB}/${TARGET_TABLE}
hwm_datetime: ${EXECUTION_DATE}
hwm_timezone: ${EXECUTION_TIMEZONE}

Unit Tests

Unit test artifacts are also generated as part of the sample workflow structure. They consist of data mocks, the actual test code, and a simple execution harness depending on the workflow language. See the bolded file below.

.
├── backfill.sch.yaml
├── daily.sch.yaml
├── main.sch.yaml
├── ddl
│ └── dataflow_sparksql_sample.sql
└── src
├── mocks
│ ├── dataflow_pyspark_sample.yaml
│ └── some_db.source_table.yaml
├── sparksql_write.sql
└── test_sparksql_write.py

These unit tests are intended to test one “unit” of data transform in isolation. They can be run during development to quickly capture code typos and syntax issues, or during automated testing/deployment phase, to make sure that code changes have not broken any tests.

We want unit tests to run quickly so that we can have continuous feedback and fast iterations during the development cycle. Running code against a production database can be slow, especially with the overhead required for distributed data processing systems like Apache Spark. Mocks allow you to run tests locally against a small sample of “real” data to validate your transformation code functionality.

Languages

Over time, the extraction of data from Netflix’s source systems has grown to encompass a wider range of end-users, such as engineers, data scientists, analysts, marketers, and other stakeholders. Focusing on convenience, Dataflow allows for these differing personas to go about their work seamlessly. A large number of our data users employ SparkSQL, pyspark, and Scala. A small but growing contingency of data scientists and analytics engineers use R, backed by the Sparklyr interface or other data processing tools, like Metaflow.

With an understanding that the data landscape and the technologies employed by end-users are not homogenous, Dataflow creates a malleable path toward. It solidifies different recipes or repeatable templates for data extraction. Within this section, we’ll preview a few methods, starting with sparkSQL and python’s manner of creating data pipelines with dataflow. Then we’ll segue into the Scala and R use cases.

To begin, after installing Dataflow, a user can run the following command to understand how to get started.

$ dataflow sample workflow --help                                                         
Dataflow (0.6.16)

Usage: dataflow sample workflow [OPTIONS] RECIPE [TARGET_PATH]

Create a sample workflow based on selected RECIPE and land it in the
specified TARGET_PATH.

Currently supported workflow RECIPEs are: spark-sql, pyspark,
scala and sparklyr.

If TARGET_PATH:
- if not specified, current directory is assumed
- points to a directory, it will be used as the target location

Options:
--source-path TEXT Source path of the sample workflows.
--workflow-shortname TEXT Workflow short name.
--workflow-id TEXT Workflow ID.
--skip-info Skip the info about the workflow sample.
--help Show this message and exit.

Once again, let’s assume we have a directory called stranger-data in which the user creates workflow templates in all four languages that Dataflow offers. To better illustrate how to generate the sample workflows using Dataflow, let’s look at the full command one would use to create one of these workflows, e.g:

$ cd stranger-data
$ dataflow sample workflow spark-sql ./sparksql-workflow

By repeating the above command for each type of transformation language we can arrive at the following directory structure

.
├── pyspark-workflow
│ ├── main.sch.yaml
│ ├── daily.sch.yaml
│ ├── backfill.sch.yaml
│ ├── ddl
│ │ └── ...
│ ├── src
│ │ └── ...
│ └── tox.ini
├── scala-workflow
│ ├── build.gradle
│ └── ...
├── sparklyR-workflow
│ └── ...
└── sparksql-workflow
└── ...

Earlier we talked about the business logic of these sample workflows and we showed the Spark SQL version of that example data transformation. Now let’s discuss different approaches to writing the data in other languages.

PySpark

This partial pySpark code below will have the same functionality as the SparkSQL example above, but it utilizes Spark dataframes Python interface.

def main(args, spark):

source_table_df = spark.table(f"{some_db}.{source_table})

viewing_by_title_country = (
source_table_df.select("title_id", "country_code",
"view_hours")
.filter(col("date") == date)
.filter("title_id IS NOT NULL AND view_hours > 0")
.groupBy("title_id", "country_code")
.agg(F.sum("view_hours").alias("view_hours"))
)

window = Window.partitionBy(
"country_code"
).orderBy(col("view_hours").desc())

ranked_viewing_by_title_country = viewing_by_title_country.withColumn(
"title_rank", rank().over(window)
)

ranked_viewing_by_title_country.filter(
col("title_rank") <= 100
).withColumn(
"date", lit(int(date))
).select(
"title_id",
"country_code",
"title_rank",
"view_hours",
"date",
).repartition(1).write.byName().insertInto(
target_table, overwrite=True
)

Scala

Scala is another Dataflow supported recipe that offers the same business logic in a sample workflow out of the box.

package com.netflix.spark

object ExampleApp {
import spark.implicits._

def readSourceTable(sourceDb: String, dataDate: String): DataFrame =
spark
.table(s"$someDb.source_table")
.filter($"playback_start_date" === dataDate)

def viewingByTitleCountry(sourceTableDF: DataFrame): DataFrame = {
sourceTableDF
.select($"title_id", $"country_code", $"view_hours")
.filter($"title_id".isNotNull)
.filter($"view_hours" > 0)
.groupBy($"title_id", $"country_code")
.agg(F.sum($"view_hours").as("view_hours"))
}

def addTitleRank(viewingDF: DataFrame): DataFrame = {
viewingDF.withColumn(
"title_rank", F.rank().over(
Window.partitionBy($"country_code").orderBy($"view_hours".desc)
)
)
}

def writeViewing(viewingDF: DataFrame, targetTable: String, dataDate: String): Unit = {
viewingDF
.select($"title_id", $"country_code", $"title_rank", $"view_hours")
.filter($"title_rank" <= 100)
.repartition(1)
.withColumn("date", F.lit(dataDate.toInt))
.writeTo(targetTable)
.overwritePartitions()
}

def main():
sourceTableDF = readSourceTable("some_db", "source_table", 20200101)
viewingDf = viewingByTitleCountry(sourceTableDF)
titleRankedDf = addTitleRank(viewingDF)
writeViewing(titleRankedDf)

R / sparklyR

As Netflix has a growing cohort of R users, R is the latest recipe available in Dataflow.

suppressPackageStartupMessages({
library(sparklyr)
library(dplyr)
})

...

main <- function(args, spark) {
title_df <- tbl(spark, g("{some_db}.{source_table}"))

title_activity_by_country <- title_df |>
filter(title_date == date) |>
filter(!is.null(title_id) & event_count > 0) |>
select(title_id, country_code, event_type) |>
group_by(title_id, country_code) |>
summarize(event_count = sum(event_type, na.rm = TRUE))

ranked_title_activity_by_country <- title_activity_by_country |>
group_by(country_code) |>
mutate(title_rank = rank(desc(event_count)))

top_25_title_by_country <- ranked_title_activity_by_country |>
ungroup() |>
filter(title_rank <= 25) |>
mutate(date = as.integer(date)) |>
select(
title_id,
country_code,
title_rank,
event_count,
date
)

top_25_title_by_country |>
sdf_repartition(partitions = 1) |>
spark_insert_table(target_table, mode = "overwrite")
}
main(args = args, spark = spark)
}

Conclusions

As you can see we try to make Netflix data engineering life easier by offering paved paths and suggestions on how to structure their code, while trying to keep the variety of options wide enough so they can pick and choose what works best for them in any particular case.

Having a well-defined set of defaults for data pipeline creation across Netflix makes onboarding easier, provides standardization and centralization best practices. Let’s review them below.

Onboarding

Ramping up on a new team or a business vertical always takes some effort, especially in a “highly aligned, loosely coupled” culture. Having a well-documented starting point removes some of the struggle that comes with starting from scratch and considerably speeds up the first iteration of the development cycle.

Standardization

Standardization makes life easier for new team members as well as those already familiar with the domain and tech stack.

Some transfer of work between people or teams is inevitable. Having standardized layout and patterns removes friction from this exchange. Also, code reviews and suggestions are easier to manage when working from a similar baseline.

Standardization also makes project layout more intuitive and minimizes risk of human error as the codebase evolves.

Centralized Best Practices

Data infrastructure evolves continually. Having easy access to a centralized set of good defaults is critical to ensure that best practices evolve along with the technology, and that users are aware of what’s the latest on the tech-stack menu.

Even better, Dataflow offers executable best practices, which present these concepts in the context of an actual use case. Instead of reading documentation, you can initialize a “real” project, change it as needed, and iterate from there.

Credits

Special thanks to Daniel Watson, Jim Hester, Stephen Huenneke, Girish Lingappa for their contributions to Dataflow sample workflows and to Andrea Hairston for the Dataflow logo design.

Next Episode

Hopefully you won’t need to wait another year to read about other features of Dataflow. Here are a few topics that we could write about next. Please have a look at the subjects below and, if you feel strongly about any of them, let us know in the comments section:

  • Branch driven deployment — to explain how Dataflow lets anyone customize their CI/CD jobs based on the git branch for easy testing in isolated environments.
  • Local SparkSQL unit testing— to clarify how Dataflow helps in making robust unit tests for Spark SQL transform code, with ease.
  • Data migrations made easy — to show how Dataflow can be used to plan a table migration, support the communication with downstream users and help in monitoring it to completion.


Ready-to-go sample data pipelines with Dataflow was originally published in Netflix TechBlog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Yet another attack against freedom of speech in Bulgaria Lawsuit against Bivol in Greece over article about the Badr tanker

Post Syndicated from Николай Марченко original https://bivol.bg/lawsuit-against-bivol-in-greece-over-article-about-the-badr-tanker.html

събота 3 декември 2022


Lawsuits against the investigative reporting outlet Bivol were among the cases discussed at the  New Horizons in Journalism international conference, hosted by the World Press Institute and the Association of European…

Разследване на TV8.md и “Биволъ” Български фирми и банката на Цв. Бориславова с €‎6 млн. от взривилата Молдова схема с бланки за паспорти

Post Syndicated from Николай Марченко original https://bivol.bg/%D0%B1%D1%8A%D0%BB%D0%B3%D0%B0%D1%80%D1%81%D0%BA%D0%B8-%D1%84%D0%B8%D1%80%D0%BC%D0%B8-%D0%B8-%D0%B1%D0%B0%D0%BD%D0%BA%D0%B0%D1%82%D0%B0-%D0%BD%D0%B0-%D1%86%D0%B2-%D0%B1%D0%BE%D1%80%D0%B8%D1%81%D0%BB.html

събота 3 декември 2022


Две български фирми и Българо-американската кредитна банка (БАКБ) на Цветелина Бориславова са замесени в мащабния скандал за източване на над €‎40 млн. при доставка на бланки за биометрични паспорти за…

Седмицата (28 ноември – 3 декември)

Post Syndicated from Ан Фам original https://toest.bg/editorial-28-nov-3-dec-2022/

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

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

„Кривият портрет на украинския бежанец“ е заглавието на анализа на Петър Георгиев в съвместната ни рубрика с АЕЖ-България „Хроники на инфодемията“. Лошата комуникация и рязката смяна на дискурса от страна на властта в първите месеци на войната в Украйна в съчетание с откровени лъжи на дезинформацията в медии и социални мрежи доведоха до обрисуването на един застрашителен образ на украинските бежанци. А оттам – и до прокарването на още по-дебела разделителна линия в българското общество.

Не може да не е направило впечатление на по-наблюдателните колко много домашни животни се опитваха да спасят украинците, напускайки домовете и градовете си заради войната. Дни след началото на руската инвазия Петя Петрова и нейни съмишленици тръгват за Украйна с бус, натоварен с хуманитарна помощ за дом за сираци в Лвов и клетки за 30 котки и 15 кучета. „Хората стояха в снега с котките си в ръце и просто плачеха. Ситуацията беше тъжна и страшна“, разказва Петя. По-късно тя се премества в украинската столица, за да помага на терен. Малко преди поредния ѝ полет за Киев Йоанна Елми успя да разговаря с нея в София.

И оставайки на темата за белезите от войната, нека продължим с интервю по повод една неотдавна издадена книга. Романът Clair de lune на Жюстин Томс разказва историята на Устине, която като малка преживява арменския геноцид, а по-късно – събитията около българската 1944 година. Художественото разръчкване на тези исторически травми – извършено с еднакво внимание към факта и фикцията, с интерес към сблъсъка между политическата жестокост и индивидуалната чувствителност – вдъхнови Стефан Русинов да потърси авторката, за да поговорят за литературния ѝ опит.

Тази седмица за рубриката „По буквите“ Зорница Христова е избрала три картинни книги на български автори. В „Първите пет“ Мила Янева-Табакова избира визуални метафори, за да разкаже за странната територия на майчинството като за нов материк, където правилата на реалността се оказват леко видоизменени. Детската поема „Мишките отиват на опера“ на поетесата Мария Донева, освен с безукорно изпипани стихове, точен ритъм, интересни рими и оригинална история, е и с великолепни илюстрации от Кирил Златков. „В Невидимия свят с Иван Милев“ пък е втората от поредицата детски книги за големи български художници на Кристина Тужарова. 

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

Приятно четене!

Източник

Седмицата (28 ноември – 3 декември)

Post Syndicated from Ан Фам original https://www.toest.bg/siedmitsata-28-noiemvri-3-diekiemvri/

Седмицата (28 ноември – 3 декември)

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

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

„Кривият портрет на украинския бежанец“ е заглавието на анализа на Петър Георгиев в съвместната ни рубрика с АЕЖ-България „Хроники на инфодемията“. Лошата комуникация и рязката смяна на дискурса от страна на властта в първите месеци на войната в Украйна в съчетание с откровени лъжи на дезинформацията в медии и социални мрежи доведоха до обрисуването на един застрашителен образ на украинските бежанци. А оттам – и до прокарването на още по-дебела разделителна линия в българското общество.

Не може да не е направило впечатление на по-наблюдателните колко много домашни животни се опитваха да спасят украинците, напускайки домовете и градовете си заради войната. Дни след началото на руската инвазия Петя Петрова и нейни съмишленици тръгват за Украйна с бус, натоварен с хуманитарна помощ за дом за сираци в Лвов и клетки за 30 котки и 15 кучета. „Хората стояха в снега с котките си в ръце и просто плачеха. Ситуацията беше тъжна и страшна“, разказва Петя. По-късно тя се премества в украинската столица, за да помага на терен. Малко преди поредния ѝ полет за Киев Йоанна Елми успя да разговаря с нея в София.

И оставайки на темата за белезите от войната, нека продължим с интервю по повод една неотдавна издадена книга. Романът Clair de lune на Жюстин Томс разказва историята на Устине, която като малка преживява арменския геноцид, а по-късно – събитията около българската 1944 година. Художественото разръчкване на тези исторически травми – извършено с еднакво внимание към факта и фикцията, с интерес към сблъсъка между политическата жестокост и индивидуалната чувствителност – вдъхнови Стефан Русинов да потърси авторката, за да поговорят за литературния ѝ опит.

Тази седмица за рубриката „По буквите“ Зорница Христова е избрала три картинни книги на български автори. В „Първите пет“ Мила Янева-Табакова избира визуални метафори, за да разкаже за странната територия на майчинството като за нов материк, където правилата на реалността се оказват леко видоизменени. Детската поема „Мишките отиват на опера“ на поетесата Мария Донева, освен с безукорно изпипани стихове, точен ритъм, интересни рими и оригинална история, е и с великолепни илюстрации от Кирил Златков. „В Невидимия свят с Иван Милев“ пък е втората от поредицата детски книги за големи български художници на Кристина Тужарова.

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

Приятно четене!

Седмицата (28 ноември – 3 декември)

Post Syndicated from Ан Фам original https://www.toest.bg/siedmitsata-28-noiemvri-3-diekiemvri/

Седмицата (28 ноември – 3 декември)

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

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

„Кривият портрет на украинския бежанец“ е заглавието на анализа на Петър Георгиев в съвместната ни рубрика с АЕЖ-България „Хроники на инфодемията“. Лошата комуникация и рязката смяна на дискурса от страна на властта в първите месеци на войната в Украйна в съчетание с откровени лъжи на дезинформацията в медии и социални мрежи доведоха до обрисуването на един застрашителен образ на украинските бежанци. А оттам – и до прокарването на още по-дебела разделителна линия в българското общество.

Не може да не е направило впечатление на по-наблюдателните колко много домашни животни се опитваха да спасят украинците, напускайки домовете и градовете си заради войната. Дни след началото на руската инвазия Петя Петрова и нейни съмишленици тръгват за Украйна с бус, натоварен с хуманитарна помощ за дом за сираци в Лвов и клетки за 30 котки и 15 кучета. „Хората стояха в снега с котките си в ръце и просто плачеха. Ситуацията беше тъжна и страшна“, разказва Петя. По-късно тя се премества в украинската столица, за да помага на терен. Малко преди поредния ѝ полет за Киев Йоанна Елми успя да разговаря с нея в София.

И оставайки на темата за белезите от войната, нека продължим с интервю по повод една неотдавна издадена книга. Романът Clair de lune на Жюстин Томс разказва историята на Устине, която като малка преживява арменския геноцид, а по-късно – събитията около българската 1944 година. Художественото разръчкване на тези исторически травми – извършено с еднакво внимание към факта и фикцията, с интерес към сблъсъка между политическата жестокост и индивидуалната чувствителност – вдъхнови Стефан Русинов да потърси авторката, за да поговорят за литературния ѝ опит.

Тази седмица за рубриката „По буквите“ Зорница Христова е избрала три картинни книги на български автори. В „Първите пет“ Мила Янева-Табакова избира визуални метафори, за да разкаже за странната територия на майчинството като за нов материк, където правилата на реалността се оказват леко видоизменени. Детската поема „Мишките отиват на опера“ на поетесата Мария Донева, освен с безукорно изпипани стихове, точен ритъм, интересни рими и оригинална история, е и с великолепни илюстрации от Кирил Златков. „В Невидимия свят с Иван Милев“ пък е втората от поредицата детски книги за големи български художници на Кристина Тужарова.

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

Приятно четене!

Изборите им паднаха в ръцете

Post Syndicated from Емилия Милчева original https://toest.bg/izborite-im-padnaha-v-rutsete/

Смърт на машините. Триумф на хартията. Това е резултатът от парламентарните баталии, преобразили Изборния кодекс. Изглежда, че на 2 октомври се състояха избори само за да може ГЕРБ, ДПС и БСП да префасонират правилата за гласуване и да върнат хартиените бюлетини за следващите избори. За това помогна и президентът Румен Радев. Държавният глава разтегна близо два месеца процедурата за връчване на първия проучвателен мандат за съставяне на правителство и така позволи на трите партии да се колаборират и да прокарат каквото си искат.

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

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

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

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

Колокация на манипулацията

Започна се в първия ден на парламента – на 19 октомври, когато БСП внесе законопроекта за връщането на хартиената бюлетина, на 2 ноември Правната комисия го одобри за първо четене, на 4 ноември мина на първо четене в пленарната зала с гласовете на ГЕРБ, ДПС и БСП. След това дойде онова 17-часово заседание на Правната комисия, а после и 18-часовото на парламента, започнало на 1 декември и преляло в следващия ден, на което, наред с хартиената бюлетина, бяха прокарани и други промени – те обезсмислиха машините и затъмниха прозрачността на изборния процес. За много от тях помогна и проруската партия „Възраждане“.

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

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

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

Онова, през което изгалопираха депутатите, бе запазването на текста за район „Чужбина“, но с аргументи, че не е ясен броят на мандатите и от кои райони ще се вземат, конкретизирането беше отложено за 2025 г. Необходимите заявления за отваряне на секции в чужбина остават 40, а не 100, както бяха поискали от ГЕРБ. Партията на Бойко Борисов оттегли и предложението си да бъде закрит Общественият съвет към ЦИК. В изборните секции ще има видеонаблюдение и видеозаснемане при броенето на гласовете и попълването на протоколите в края на изборния ден. Гласуването ще е зад паравани.

Най-важните промени – отвън

Изборният кодекс е сред най-често променяните норми в България, наред с данъчните закони, Закона за устройство на територията (ЗУТ), Наказателно-процесуалния кодекс и Наказателния кодекс. Политиците се заемат често с ревизията на изборните правила. При това те не налагат промени, които биха подпомогнали демократичния вот – например един кандидат да не води листата в два избирателни района (както поискаха и от ПП); да няма толкова силна защита от преференции, която гарантира първото място за водача на листата – и съответно волята на партийното ръководство; прочистването на избирателните списъци от мъртви души, за което вече няма извинение за отлагане след преброяването от 2021 г., защото сега избирателите са повече от населението; промяна на мандатите на районите съобразно броя на избирателите, отново на база данните от преброяването.

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

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

Причини и последици

Съмненията в машинното гласуване не се насаждат отсега и на сметките на ЦИК се пише слабата работа по изграждане на доверие към този процес. За същото призова и президентът преди вота на 2 октомври. На среща с ЦИК той каза, че е необходимо „повишаване на доверието в машинния вот […], ясна методика и публични и прозрачни действия, които да дадат увереност на партиите и гражданите, че няма да има манипулации – от съхраняването, през зареждането на софтуера, до транспортирането, гласуването и отчитането на резултата“.

„Истинската задача пред нас, ако сме отговорни политически партии и хора, не е Изборният кодекс, а да се състави техническо, кратко правителство, да мине зимата, за да работи парламентът“, обясни Бойко Борисов в типичния си патерналистки стил в онлайн изявление на 22 ноември. Без съмнение това е истинската задача, но защо тогава ГЕРБ се втурна да поправя Изборния кодекс в завера с БСП и ДПС? Отговорът е ясен за всички – заради предстоящите наесен местни избори, където малко на брой гласове променят резултата.

Впрочем един от големите проблеми на гласуването с хартиена бюлетина в България – недействителните гласове – се проявява най-сериозно на местни избори. По данни на Института за развитие на публичната среда на местния вот през 2019 г. броят на невалидните бюлетини е бил 15,1%, а на тези през 2015 г. – 14%. На изборите за парламент и европарламент те са в пъти по-малко.

ГЕРБ и ДПС се борят да опазят позициите в местната власт, където са всевластни господари – отслабването им ще постави началото на края. Местната власт е основа за дълголетие на всяка политическа сила в България. Това означава добре нахранени партийни структури, което осигурява и гласове за избори. Ядрата на ГЕРБ и на ДПС са именно там. Трудно ще бъде да ги изместят, но амбициите на бъдещите обединени кандидатури на „Продължаваме промяната“ и „Демократична България“ са това да стане в големи областни центрове начело със София. Добре е да си дадат сметка, че срещу техните кандидати ще се изправят не просто местни партийни структури, а обръчите от фирми около кметовете на ГЕРБ и ДПС, заедно с работещите в тях и семействата им и общинската администрация. За БСП (вносител на предложението) остава илюзията, че може да увеличи стапящата се електорална подкрепа.

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

От понеделник обаче на ход ще е ГЕРБ. Искат ли да се прегърнат пред всички с ДПС, или на Борисов това не му нрави? Или ще си играят на правителство на малцинството, което останалите от „хартиената коалиция“ подкрепят, но в което не участват. Какво пък, изборите им паднаха в ръцете. Вероятно ще се опитат да го направят и с т.нар. закон за главния прокурор – както им е изгодно. Политическата битка, която предстои, е предизборната кампания за „Демократична България“ и „Продължаваме промяната“. Добре е да го помнят.

Заглавна снимка: „Тоест“

Източник

The collective thoughts of the interwebz