Pull to refresh
25
10
Анастасия @AnROm

Программист

Send message

Один из старейших языков программирования COBOL, похоже, вскоре уйдёт с рынка. И поможет ему в этом IBM

Reading time3 min
Views15K

Языку программирования COBOL свыше 60 лет. Несмотря на это, он до сих пор активно используется. Конечно, в подавляющем большинстве сфер его заменили современные языки программирования. Но дело в том, что в ряде стран до сих пор работают аппаратные системы с ПО на базе этого ЯП. Особенно много их в США.

Поэтому COBOL держится на плаву и в последние несколько лет даже набирал популярность. Так, например, в августе 2023 года язык вышел на 15 место по популярности среди ЯП. Год назад он находился на 31 месте. Впечатляющий рост.  Но через время, возможно, он станет уже историей. Всё дело в инициативе IBM, о которой расскажем под катом.

Читать далее
Total votes 27: ↑24 and ↓3+31
Comments74

Советский UNIX. Как в СССР ковали собственную операционную систему

Level of difficultyEasy
Reading time9 min
Views41K

На рубеже 70-х и 80-х годов ХХ столетия UNIX набирал популярность не только в академических кругах, но также активно внедрялся в различные бизнес-процессы коммерческих предприятий. Портируемость, простота архитектуры и широкие возможности ОС привели к появлению у этой платформы целой армии верных поклонников. Однако «юних» — это у них. А что у нас? В Советском Союзе имелись свои талантливые инженеры и программисты, которые пытались создавать собственные версии операционных систем, во многом вдохновлённые идеями и архитектурой UNIX. И некоторые из этих проектов оказались вполне успешными. А самым успешным среди них стала ОС ДЕМОС.
Читать дальше →
Total votes 114: ↑108 and ↓6+151
Comments152

Асинхронные режимы фреймворка gRPC и принципы их работы в С++

Reading time26 min
Views23K
Однажды мы с нашей командой решили попробовать gRPC для своих задач. После некоторых обсуждений, пришли к выводу, что будем использовать асинхронные клиент и сервер. Однако, под рукой оказался рабочий пример из документации только для одного режима. Примеры остальных режимов взаимодействия, основные принципы работы асинхронных операций, принципы работы асинхронного сервера и клиента в gRPC и многое другое под катом.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments1

Timers in .Net

Reading time3 min
Views59K
В последнее время не в первый раз сталкиваюсь с тем, что разработчики не до конца понимают как работает один из стандартных таймеров в .NET — System.Threading.Timer.
Т.е. в общем-то они вроде понимают что таймер что-то выполняет, скорее всего в ThreadPool — и если его использовать для периодического выполнения чего-либо, то он вполне подойдет. Но вот если вам надо создать не один таймер, а положим 1000, то тут люди начинают волноваться: а вдруг вот что-то там не так, а вдруг это все-таки 1000 потоков и даже боятся использовать их в таких случаях.

Хотелось бы пролить немного света на этот «таинственный» System.Threading.Timer.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments23

Знай свой инструмент: Event Loop в libuv

Reading time6 min
Views65K
image
Юдель Пэн. Часовщик. 1924

«Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы» 
Алан Кокс, прим. Википедия


“Знай свой инструмент” — твердят все вокруг и все равно доверяют. Доверяют модулю, доверяют фреймворку, доверяют чужому примеру.

Излюбленный вопрос на собеседованиях по Node.js — это устройство Event Loop. И при всем том, очевидном факте, что прикладному разработчику эти знания будут полезны, мало кто пытается самостоятельно погрузиться в устройство событийного цикла. В основном, всех устраивает картинка сверху. Хоть это и похоже на пересказ фильма, который ты не смотрел, а о котором тебе рассказал друг.
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments20

Автоматизируем мониторинг: низкоуровневое обнаружение для SNMP

Reading time74 min
Views101K
Мы уже писали о том, какой замечательный инструмент как LLD есть в Zabbix.



Тогда же мы посетовали, что составные индексы в SNMP-таблицах в системе не поддерживаются, что несколько ограничивает возможности по применению. Например, если вам нужно сделать Discovery двух RAID-контроллеров на одном сервере и всех физических и логических дисков за ними, то, увы, мы этого сделать не могли без костылей. Работало только для первого RAID-контролера в списке. Но, как говорится, все течет, все меняется! И вот долгожданный релиз 2.2 убрал это связывающее нас по рукам ограничение.

Рассказать о нововведении я бы хотел на примере шаблона для HP серверов. Но сначала немножко вспомним про SNMP.

Читаем и учимся
Total votes 21: ↑21 and ↓0+21
Comments20

Опыт написания асинхронного поллинга сетевых устройств

Reading time6 min
Views5.6K


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

Читать про идеи, итерации и грабли
Total votes 12: ↑11 and ↓1+16
Comments10

Быстрый SNMP опрос сетевых устройств

Reading time3 min
Views8.3K

Я отношу себя к поколению "диких сетевиков", которые в начале века начинали строить сети различного масштаба на постсоветском пространстве. Не хватало всего - денег, образования, специалистов, оборудования ... Зато энтузиазма и самоуверенности было немерено. Лепили сети из чего попало, или из того на что хватало денег. Как сейчас помню тот день, когда купил свой первый L2 коммутатор - знаменитый DES-3526.

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

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

Человеко-читаемый JavaScript: история о двух экспертах

Reading time7 min
Views7.9K


Каждый хочет быть экспертом. Но что это хотя бы означает? За годы работы мне встречалось два типа людей, именуемых «экспертами». Эксперт первого типа – это человек, который не только знает в языке каждый винтик, но и непременно все эти винтики использует, независимо от того, приносит ли это пользу. Эксперт второго типа также знает каждую синтаксическую тонкость, но разборчивее подходит к выбору инструмента для решения задачи, учитывая ряд факторов, как связанных, так и не связанных с кодом.

Давайте угадаю, эксперта какого типа вы хотели бы видеть в своей команде. Второго, верно? Это такой разработчик, который стремится выдавать удобочитаемый код, такие строки JavaScript, которые будут понятны другим специалистам, и которые легко будет поддерживать. Но характеристика «удобочитаемый» редко является определяющей – на самом деле, она обычно заключена в глазах смотрящего. Итак, к чему нас это приводит? К чему нужно стремиться, если наша цель – удобочитаемый код? Есть ли в данном случае явно верный или неверный выбор? Зависит от многого.

Очевидный выбор


Чтобы облегчить труд разработчика, TC39 в последние годы добавил множество новых возможностей в ECMAScript, в том числе, многие проверенные паттерны, заимствованные из других языков. Одним из таких нововведений, появившихся в ES2019, является метод Array.prototype.flat(). Он принимает аргумент глубины или Infinity и выравнивает массив. При отсутствии аргументов глубина массива по умолчанию равна 1.
Читать дальше →
Total votes 31: ↑20 and ↓11+18
Comments11

Как мы раскрыли 24-летний баг в ядре Linux

Reading time13 min
Views45K

Захватывающий детективный рассказ о поиске и исправлении трудноуловимого и при этом весьма странного бага, который неведомым образом ускользал от обнаружения на протяжении долгих лет взросления системы Linux. В начале описывается предыстория и технологическая база компании, в которой этот баг постигло разоблачение, после чего автор подробно демонстрирует все предпринятые для его раскрытия шаги.
Читать дальше →
Total votes 125: ↑118 and ↓7+149
Comments38

Лайфхак: как спарсить гигабайт double-ов в секунду

Reading time6 min
Views24K


Как в коде на C++ прочитать значение double из строки?

std::stringstream in(mystring);
while(in >> x) {
   sum += x;
}

На Intel Skylake с компилятором GCC 8.3, такой код парсит 50 МБ/с. Жёсткие диски запросто обеспечивают последовательное чтение со скоростью в несколько ГБ/с, так что вне всякого сомнения, нас ограничивает не скорость чтения с диска, а именно скорость парсинга. Как его ускорить?

Первое, что напрашивается – отказаться от удобств, предоставляемых потоками в C++, и вызывать strtod(3) напрямую:

do {
    number = strtod(s, &end);
    if(end == s) break;
    sum += number;
    s = end; 
} while (s < theend);

Скорость вырастает до 90 МБ/с; профайлинг показывает, что при чтении из потока выполняется ~1600 инструкций на каждое читаемое число, при использовании strtod – ~1100 инструкций на число. Стандартные библиотеки Си и C++ можно оправдать требованиями универсальности и переносимости; но если ограничиться парсингом только double и только на x64, то можно написать намного более эффективный код: хватит 280 инструкций на число.
Читать дальше →
Total votes 64: ↑62 and ↓2+100
Comments62

Организация автоматизированного тестирования GUI

Reading time5 min
Views15K
При разработке мы стараемся покрывать наш код не только матом, но и unit тестами. Однако все покрыть тестами не всегда получается. К тому же, остается GUI, для которого написание тестов довольно трудоемкая работа. При всех этих проблемах неизменным остается требование, что каждый следующий камит в репозиторий не должен портить уже существующий функционал.

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

Пол года назад в ходе исследования инструментов для тестирования GUI в поле моего зрения попал продукт Squish компании froglogic. Из плюсов данного решения можно отметить следующие:

  • тесная дружба Squish c классами Qt (в том числе и itemы в QGraphiscScene);
  • кроссплатформенность;
  • поддержка скриптовых языков (JavaScript, Python);
  • автоматизированная генерация текста теста;
  • удобная система запуска тестов из консоли.

Читать дальше
Total votes 36: ↑34 and ↓2+32
Comments21

Почему все порталы с персональными данными вне закона с 2008 года и как получилось, что всем плевать, в том числе ФСБ

Reading time7 min
Views35K

Доброго времени суток, Хабр! Сегодня мы поговорим о том, к чему приводят невыполнимые требования законодательства. Понятно, что глобально это приводит к невыполнению этих самых требований, но здесь мы рассмотрим конкретный пример.

Речь пойдет о требовании ФСБ России шифровать любые персональные данные, передающиеся по сетям связи общего пользования (в народе – просто Интернет), только сертифицированными криптографическими средствами.

Читать далее
Total votes 53: ↑51 and ↓2+67
Comments95

О целесообразности Selenium WebDriverWait

Reading time5 min
Views26K
Чем ближе я знакомлюсь с Selenium WebDriver, тем больше у меня возникает вопросов, почему тот или иной функционал выполнен так, а не иначе. В своем выступлении «Заморочки в Selenium WebDriver» Алексей Баранцев проливает свет на тонкости реализации этого инструмента автоматизации и разграничивает «баги» и «фичи». В видео вы найдете много интересного, но все же некоторые моменты остаются (по крайней мере для меня) в тени.

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

Размышления будут преподнесены в контексте С#, хотя я не думаю, что логика реализации этого класса будет хоть сколько отличаться для других языков программирования.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments17

Step-by-step: настройка SpecFlow для русскоязычного проекта при написании тестов в среде .Net

Reading time6 min
Views25K
Не нашла в интернете пошаговой русскоязычной инструкции о том, как настроить SpecFlow на работу с русскими спецификациями. Да и вообще нет русской инструкции о том, как начать работать со SpecFlow. Зато обнаружила некоторый скепсис у других автоматизаторов по поводу того, что это можно сделать легко и просто, однако предложенные альтернативы мне не приглянулись в далекой перспективе (просмотр тестов с веба специалистами технической поддержки). Мне нужен именно SpecFlow и именно по-русски!

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

Эта статья полезна для тех, кто:
  • оценивает перспективы применения Specification by Example (BDD) подхода к автоматизации тестирования, и хочет описывать фичи и сценарии на русском языке, и хочет оценить scope работ;
  • хочет как можно быстрее начать применять BDD в своем проекте.

Эта статья бесполезна для тех, кто:
  • сам знает как это просто делается;
  • готов потратить несколько часов работы + владеет английским языком достаточно хорошо, чтобы самому разобраться в инструкциях.

Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments6

UI тесты: Cucumber + Selenide

Reading time8 min
Views29K

Часть 2


Продолжение статьи о написании UI тестов на Cucumber с помощью Selenide. В первой части был разобран простейший пример smoke-теста для riskmarket.ru. В этой части апгрейдим тест до полноценного проекта с отчетами, поговорим о скриншотах, кастомных Condition, проаннотируем элементы, введем PageObject.


Получившийся проект вполне можно использовать как фундамент для ваших UI тестов.


Проект на гитхабе


Видео исполнения теста на youtube



Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments2

Исполняемая спецификация: SpecFlow от А до Я

Reading time8 min
Views60K

Эта статья является продолжением первой части и раскрывает технические подробности работы с «исполняемой спецификацией» с помощью SpecFlow.

Для начала работы вам понадобится плагин к Visual Studio (скачивается с официального сайта) и пакет SpecFlow (устанавливается из nuget).

Итак, наш Product Owner попросил команду разработать калькулятор…
Под катом user stories, тестовые сценарии, автоматизация и запуски по расписанию из Team City
Total votes 17: ↑16 and ↓1+15
Comments2

Тестирование UWP приложений с помощью Appium

Reading time5 min
Views15K

На данный момент UWP приложения используют в качестве решения для тестирования через интерфейс Coded UI. Но если у вас приложение под несколько платформ, то в этом случае вам придется писать тесты под каждую платформу отдельно.

В 2016-ом году была анонсирована возможность тестирования UWP приложений с помощью Appium. Для этого был создан драйвер под названием Windows Application Driver (WinAppDriver).
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments10

BDD с помощью Cucumber

Reading time3 min
Views105K
Если вы привыкли сначала писать код, а потом его тестировать, то с BDD такой подход совсем не уместен. Сила BDD в том, что он помогает вести разработку начиная со стадии оформления ТЗ. Для BDD это список свойств (фич), который уместно писать вместе с заказчиком.

Но самое главное, что по этому же списку происходит автоматическое тестирование проекта. Инструмент тестирования (в нашем случае это Cucumber) методично пройдет по вашему перечню и дотошно проверит реализацию каждой фичи.
Читать дальше →
Total votes 34: ↑30 and ↓4+26
Comments21

Как поднять проект тестирования на windows 10 (Cucumber + capybara + selenium-webdriver)

Reading time4 min
Views9.6K
Статья рассчитана на знакомоство с автотестированием и разверткой среды в Windows 10 и предназначена для тех, кто хоть чуть — чуть знает о Cucumber + Capybara + Selenium-webdriver. Идея для статьи появилась из-за различий в разворачивании окружения на Windows 10 и Linux.


Пару слов о gem-ах (библиотеках) Cucumber + Capybara + Selenium-webdriver, которые нужны для запуска и наполнения проверками UI тесты.

Cucumber


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


Capybara


Capybara — гем, позволяющий искать/кликать/… по элементам браузера. Т.е. представляет собой связующее звено между Cucumber шагами (steps) теста, и webdriver-ом (экземпляр вызываемого браузера). Здесь можно глянуть методы этого гема.

Selenium-webdriver


Selenium-webdriver — это инструмент для автоматизации действий веб-браузера. По сути это есть экзмеплял (инстанс) браузера.
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments8

Information

Rating
557-th
Location
Москва и Московская обл., Россия
Registered
Activity