Pull to refresh

Кипучий СКУД

Reading time9 min
Views7.9K
image
Один из коммутационных узлов старого СКУДа. Скрутки и спайки эффектно маскировали в корпусах от радиоприёмников.

Когда я только устроился на эту территорию, я немного обалдел. У нас на щёлковской заводской площадке впервые установили систему контроля и управления доступом (СКУД) в 2008 году.

Доступ на площадь 12 гектаров обеспечивала система с грозным названием «РУБЕЖ». Для подключения её блоков между собой использовались медные многопарные кабели для телефонии, 1980–1990-х годов предположительно.

В стародавние времена систему устанавливали местные кулибины-связисты. Вероятно, перед ними стояла задача что-то сделать без какого-либо финансирования. Они и сделали. СКУД, камеры наблюдения, всё, что можно было соединить, было соединено по телефонным линиям.

Технической документации до нас не дошло, а максимальный срок службы, отмеренный производителями системе «РУБЕЖ», был превышен лет так на пять.

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

Однажды, например, электрики проводили плановые работы на складе и в этой зоне временно отключили электричество. Я очень удивился, когда считыватели погасли — а магниты продолжали держать дверь! Оказалось, что магниты на дверях склада были подключены к третьему этажу соседнего здания. И такие схемы подключения были повсеместно. Непонятен был принцип, как всё это реализовывалось.

Я и раньше осень не любил, а потом стал не любить ещё больше, потому что эти ангельские слёзы топили кабельную канализацию, после чего начиналась дискотека из замыканий телефонных линий и линий, по которым трудился СКУД.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments31

Хочу мороженое, как у того ребёнка: русские офисы

Reading time7 min
Views4.3K
image

Мы разрабатываем Р7-Офис. По сути, главный ориентир — сделать, как MS, но только [].

Раньше это было бесплатно (на самом деле — нет), по-русски, совместимо со всеми старыми документами, безопасно. Сейчас в силу текущей ситуации компании не могут купить, а часто даже использовать уже ранее купленные зарубежные решения. Так что мы делаем такой продукт — как MS, только наш.

То есть задачи для редактора быть:
  • Удобным для практического применения в России.
  • Совместимым с файлами MS-Офиса.
  • С похожим интерфейсом, который уже был привычен почти всем, кто работал с документами.

Важно было учесть нужную пользователям функциональность, многопользовательский режим работы и требования ГОСТ Р 7.0.97-2016 для деловой документации.

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

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

При работе с Win/*nix есть куча доработок под платформу — от интерфейсов до особенностей механизма блокировки файлов, и это тоже оказалось не мелочью.

Рассказываю подробно, как у нас дела с русским редактором.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments21

KISS your website или как написать уважаемый сайт на аутсорсе, глава первая

Level of difficultyMedium
Reading time9 min
Views3K

Добрый день. Меня зовут Тимофей, я фронт-тимлид в диджитал-продакшене ДАЛЕЕ. В данном цикле статей я поделюсь подходами и инструментами фронтенд-разработки на аутсорсе, которые помогут создать качественный продукт без кошмарного instant-legacy и значительно облегчат жизнь команде разработчиков и не только.

Расскажу, почему не стоит излишне усложнять архитектуру фронтенда, и дам примеры удобных и эффективных инструментов разработки с точки зрения DX (developer experience. Это важно) и дальнейшей поддержки.

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments4

База знаний как ключевой элемент управления Enterprise-архитектурой международного аэропорта «Шереметьево»

Level of difficultyMedium
Reading time5 min
Views1.4K

Представьте себе, что вы летите с отдыха с пересадкой, и вот в транзитном аэропорту вашему самолету сначала не дают посадку, затем вы тусите пару суток в разных очередях, никто ничего не понимает, вам обещают вылет через 2 часа, но снова и снова переносят. Наконец, измотанный и уставший после отпуска, вы прилетаете в свой город и узнаете, что ваш чемодан улетел в кругосветку. Представили? А вот пассажирам, которые оказались в лондонском Хитроу 28 марта 2008 года и представлять не надо. 

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

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments4

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

Reading time10 min
Views19K

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

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

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments54

Тестируемая архитектура. Часть 3: граница тестирования

Reading time14 min
Views1.9K

В прошлой части мы провели анализ архитектуры, итогом которого стало внедрение дополнительного разделения на слои: Core (ядро) и Externals (источники данных).

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments3

Построение архитектур для обработки данных в режиме реального времени при помощи Apache Kafka, Flink и Druid

Level of difficultyHard
Reading time11 min
Views8.1K
image

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

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

Но в опенсорсном пространстве есть решение, разработанное в опенсорсе. В сочетании друг с другом Apache Kafka, Flink и Druid, позволяют создать архитектуру для обработки данных, которая работает в режиме реального времени и позволяет исключить все эти этапы ожидания. В этом посте мы исследуем, как комбинация этих инструментов позволяет создавать широкий спектр приложений для обработки данных в режиме реального времени.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments0

Паттерн Unit of Work в разрезе чистой архитектуры DDD на языке Golang

Level of difficultyMedium
Reading time9 min
Views14K

Всем привет! Недавно мне выпала возможность разработать шаблон сервиса, который можно было бы использовать как для монолитной, так и для микро‑сервисной архитектуры. Шаблон должен был придерживаться принципов Domain‑Driven Design (DDD). В этом процессе, я столкнулся с двумя интересными проблемами:

Проблема 1: Сложности обеспечения транзакционности базы данных

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

Проблема 2: Нарушение изолированности слоя

В попытке решить первую проблему, некоторые разработчики переносят работу с транзакциями на уровень слоя приложения, чтобы избежать прямой зависимости от базы данных. Однако, такой подход, несмотря на его обоснование, может нарушить изолированность слоев и противоречить принципам DDD и чистой архитектуры. Это, в конечном итоге, затрудняет поддержку приложения и усложняет его масштабирование.
Эти две проблемы стали отправной точкой для исследования применения паттерна Unit of Work и его роли в обеспечении надежности и консистентности данных в контексте Golang и DDD.

В статье я расскажу о своем подходе к решению этих задач.

Читать далее
Total votes 7: ↑5 and ↓2+3
Comments7

Простой production-ready генератор студийных фото продуктов

Level of difficultyMedium
Reading time12 min
Views3K

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

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments2

Изучение мидлварей в Laravel 11

Level of difficultyEasy
Reading time4 min
Views6.8K

Выход Laravel 11 намечен на первый квартал 2024-го года, что может произойти уже в следующем месяце.

Я начинаю новый проект, и поскольку дата выхода очень близка, решил взглянуть на то что изменится в новом крупном обновлении. Помню как пол года назад прочитал в Laravel News статью о том, что Http Kernel уходит в небытие, и не придал этому особого значения.

Когда я создал проект с помощью команды laravel new project --dev, я был очень удивлён тем, насколько уменьшился размер проекта. Было очень удивительно видеть пустую папку config (можно опубликовать файлы конфигурации при помощи команды php artisan config:publish)!

И, конечно же, там нет Http Kernel. Итак... как же добавить или изменить мидлвари? До Laravel 11 ядро Http Kernel, располагающееся по пути app/Http/Kernel.php,было местом хранения всей конфигурации для мидлварей. Также до Laravel 11 не было необходимости трогать руками файл bootstrap/app.php, если только Вы не использовали фреймворк Lumen. Однако в новой версии его нужно...

Трогать мидлвари
Total votes 20: ↑20 and ↓0+20
Comments5

Крупномасштабный стриминг видео с использованием Kubernetes и RabbitMQ

Level of difficultyMedium
Reading time8 min
Views12K
Давайте поговорим о тех проблемах, с которыми приходится сталкиваться на сайтах для стримингового видео, и как организовать архитектуру такого сайта, чтобы было проще справляться с нагрузками.

image
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments17

Exception Handling: сквозь мультивселенные интероперабельности

Reading time10 min
Views2.4K


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

Меня зовут Максим Кокряшкин, я занимаюсь поддержкой и расширением функциональности форка LuaJIT, интегрированного в Tarantool. В этой статье мы обсудим, как интероперабельность исключений помогает упростить обработку ошибок на стыках разных языковых рантаймов, а также посмотрим, как можно реализовать интероперабельность стандартными механизмами обработки исключений.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments0

Structurizr, описание, перевод (часть 1/3)

Level of difficultyMedium
Reading time9 min
Views1.6K

В данной статье содержится вольный перевод документации по Structurizr.

Из-за большого объема информация разделена на три статьи:

общее описание языка (эта статья);

синтаксис;

книга рецептов.

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments1

Structurizr, описание, перевод (часть 2/3)

Level of difficultyMedium
Reading time17 min
Views534

В данной статье содержится вольный перевод документации по Structurizr.

Из-за большого объема информация разделена на три статьи:

общее описание языка;

синтаксис (эта статья);

книга рецептов.

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments0

Structurizr, описание, перевод (часть 3/3)

Level of difficultyMedium
Reading time18 min
Views1.1K

В данной статье содержится вольный перевод документации по Structurizr.

Из-за большого объема информация разделена на три статьи:

общее описание языка;

синтаксис;

книга рецептов (эта статья).

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments0

Mamba. От начала до конца

Level of difficultyMedium
Reading time5 min
Views23K

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

Читать далее
Total votes 29: ↑28 and ↓1+27
Comments25

Действительно ли C++ — лучший язык, чтобы выстрелить себе в ногу?

Level of difficultyMedium
Reading time15 min
Views30K
В 2023 году одной из главных IT-новостей стала публикация гайда от Агентства национальной безопасности (NSA) США, в котором языки С/C+ признавались «опасными» и требующими перехода на «безопасные» C#, Go, Java, Ruby и Swift.

В этой статье я с позиции Security Champion в KasperskyOS, собственной микроядерной операционной системе «Лаборатории Касперского», расскажу, так ли плохо обстоят дела с безопасностью в С++ на самом деле, а также разберу различные подходы к митигации описанных проблем, которые современная индустрия предлагает для решения данного вопроса.
Читать дальше →
Total votes 49: ↑40 and ↓9+31
Comments135

Kubernetes: продолжаем говорить о контейнерах и архитектуре

Level of difficultyMedium
Reading time18 min
Views5.3K

Каждый раз залипаю на анимацию работы Raft-протокола

В прошлый раз мы говорили о контейнерах, механизмах Namespace и о том, как это всё работает.

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

Попробуем немного отойти от классического «yaml-программирования» и заглянуть под капот.

Коснёмся CAP-теоремы, важности ETCD и причинах его устойчивости к split-brain-проблеме. А ещё посмотрим, почему Kubernetes API можно распределить на кучу инстансов, работающих одновременно, а Controller Manager может работать только в одном экземпляре за раз.

Вот о том, как всё это работает в Kubernetes, кто и зачем тыкает в API, мы сегодня и поговорим.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments0

Монолог про отказоустойчивость микросервисных приложений, или Что может пойти не так?

Level of difficultyEasy
Reading time19 min
Views6.9K

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

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

Читать далее
Total votes 28: ↑28 and ↓0+28
Comments15

Как DDD работает для меня

Level of difficultyMedium
Reading time5 min
Views6.2K

Привет! Меня зовут Станислав, я фронтенд-разработчик компании Тинькофф. Занимаюсь разработкой веб-приложений и написал десятки тысяч строк кода, массу велосипедов и костылей, пока не познакомился с разработкой, основанной на модели предметной области, или Domain-Driven Design.

DDD — это система знаний, приемов и методов, предназначенная для создания приложений высокой сложности. DDD обобщает лучшие практики коммерческой разработки программного обеспечения и постоянно совершенствуется, предоставляя разработчику надежную опору для принятия решений. Лучший способ узнать больше — это книга Эрика Эванса Domain-Driven Design: Tackling Complexity in the Heart of Software.

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

Читать далее
Total votes 13: ↑10 and ↓3+7
Comments12