Как управлять IТ-инфраструктурой в быстрорастущей компании: опыт DataRobot

Привет! Меня зовут Олег Сохань, я IT Operations инженер компании DataRobot.

Мы технологическая компания, базирующаяся в Бостоне, с офисами во многих городах по всему миру, включая Вашингтон, Колумбус, Копенгаген, Киев, Сан-Франциско, Сингапур и Токио.

Наша IT-команда занимается поддержкой жизнедеятельности компании 24/7/365. Мы ведем ежедневную операционную деятельность и несем ответственность за то, чтобы каждый сотрудник имел доступ к необходимым IT-ресурсам компании, а также получал со стороны команды все, чтобы быть продуктивным и успешным. Мы также осуществляем менеджмент аппаратных сред, занимаемся установкой критически важных обновлений программного обеспечения (ПО) и проактивно работаем над различными IT-проектами для повышения эффективности работы команды в целом. В зоне нашей ответственности 1500+ компьютеров.

В этой статье хочу рассказать, как мы управляем IT-инфраструктурой через платформу Jamf MDM (Mobile Device Management), а также почему выбрали именно этот инструмент и какие проблемы удалось решить с его помощью.

Почему выбрали macOS и Jamf

При выборе инфраструктуры для работы мы остановились на Apple в качестве основной платформы по нескольким причинам:

  • Большинство наших разработчиков и DevOps-инженеров — выходцы из мира Unix. А macOS — это операционная система из этого семейства (Darwin — open-source Unix-like operating system).
  • macOS обладает достаточно хорошим миксом удобных средств для разработки, а также набором приложений для решения повседневных бизнес-задач. Среди таких приложений — Microsoft Office, Safari/Chrome/Firefox, Slack, Cisco Webex, Google Meet или Zoom для коммуникации сотрудников.
  • Компьютеры Apple составляют единое целое: платформу и ПО разрабатывает единый производитель. Это позволяет избежать многих проблем совместимости.
  • Каждый новый релиз macOS имеет много новаций и трендовых технологий — как в области разработки, так и в области кибербезопасности.
  • Компьютеры Apple долговечнее с точки зрения технологического старения — это разумная бизнес-инвестиция.
  • Мы не подвержены всем опасностям мира Windows, будь то криптошифровальщики или тонны вредоносных программ*.

* Не ввязываясь в холивар: ответ — да, они бывают, но это редкий случай. На сегодня исследователи в области безопасности выявили несколько примеров программ-вымогателей для Mac, но ни одна из них не привела к серьезным вспышкам.

В прошлом году компания приблизилась к порогу в 1000 сотрудников. И мы осознали, что выросли из «коротких штанишек». После этого вручную управлять IT-инфраструктурой, которая «разбросана» на пяти континентах, стало слишком тяжело и неэффективно. К тому же нам требовалось обеспечить безопасность устройств, которые используют сотрудники. С другой стороны, из-за быстрого увеличения числа сотрудников компании возникла задача умения масштабировать бизнес. Тогда мы задумались над вопросами внутренней оптимизации IT-ресурсов, одним из которых стало внедрение MDM — сервиса для менеджмента мобильных устройств.

Мы потратили месяцы на поиски лучшего решения для нашей инфраструктуры. Однако, так как большинство компьютеров компании — это компьютеры Apple, мы выбрали лидера рынка, платформу Jamf MDM. Ее используют более 40 тыс. компаний в мире.

Мы создали чек-лист задач, которые хотим решить с помощью этого продукта:

  • производить начальную подготовку и настройку компьютера для задач IT-онбординга;
  • иметь возможность применять корпоративные политики к конечной точке, в том числе к компьютеру сотрудника;
  • решать задачи по управлению системными обновлениями, а также обновлениями установленных приложений в сжатые сроки путем развертывания критически важных обновлений;
  • привести компьютеры в соответствие с базовыми стандартами безопасности и нормативными требованиями, придерживаться передовых практик в этой сфере, а также управлять патчами, бороться с уязвимостями;
  • автоматизировать развертывание ПО для повышения производительности;
  • собирать массивы информативных данных и использовать их для принятия правильных решений для оптимизации бизнес-процессов компании;
  • развернуть на конечных точках приложение IT Self-Service — о нем расскажу ниже.

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

Вот некоторые результаты, которых мы достигли с Jamf.

Автоматизировали инвентаризацию

Лет десять назад практически все рабочие компьютеры были настольными и находились внутри периметра компании. Но со временем тренды изменились. Сейчас около 95% наших компьютеров — это мобильные устройства, в нашем случае — ноутбуки. Сотрудники работают с ними как внутри, так и вне офиса: берут в командировки, подключаются удаленно из дома, что во время пандемии стало особенно актуальным.

Поэтому возникают несколько вопросов:

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

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

Например: разработчики приложений, таких как Zoom или Google Chrome, анонсируют, что все версии, кроме самой последней, содержат уязвимость. А значит, нам нужно в максимально короткие сроки получить отчет о том, какие компьютеры имеют уязвимость, и форсировать процесс обновления конкретного приложения во всех офисах компании, а также на компьютерах сотрудников, которые работают удаленно в разных часовых поясах. При этом важно не прерывать активность пользователя или, как вариант, прерывать краткосрочно с соответствующим оповещением о том, что это деятельность DataRobot IT и она направлена на устранение конкретной проблемы.

Как результат, важно иметь возможность оценить конкретный кейс, в том числе и по различным критериям:

  • какое время затрачено на глобальное обновление уязвимости;
  • сколько компьютеров подвержены проблеме уязвимости ПО;
  • насколько эффективно работает подразделение IT и так далее.

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

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

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

Возвратимся к примеру с версиями. Если производитель ПО объявляет об уязвимости, мы создаем в Jamf поиск по критерию «версия ниже чем N». В результате получаем отчет, на скольких компьютерах стоят дискредитированные версии, на каких именно устройствах, кто владелец устройства и в каком офисе оно находиться. После этого нет необходимости писать всем сотрудникам (делать email-рассылку) с просьбой обновиться.

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

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

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

Приведу еще пример из последнего, что мы реализовали в разрезе эффективного использования Jamf для задач инвентаризации. Недавно задались целью найти решение задачи, как собирать данные о статусе батарей ноутбуков сотрудников. Постановка задачи следующая. Политика Jamf должна собрать данные о <health battery condition> с конечных точек и сформировать smart-группу по признаку <service recommended>. И более того, каждый первый понедельник месяца сформированный отчет в Jamf отправляется в систему HelpDesk компании в виде письма с вложением. Каждое входящее письмо автоматически конвертируется в открытый тикет.

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

Развернули IT Self-Service как коммуникацию сотрудника и IT

С помощью системы Jamf мы предложили новую форму коммуникации сотрудника с IT посредством приложения IT Self-Service. Фактически это портал для сотрудников компании, который призван изменить статус-кво в сложившихся бизнес-процессах внутри компании.

Наша позиция: IT Self-Service — это первый IT-компаньон сотрудника и первая линия оказания IT-помощи. Главная идея этого сервиса — создать условия для снижения нагрузки на IT-команду и уменьшить число открытых тикетов в HelpDesk. А значит, более эффективно использовать IT-ресурсы компании.

Рассмотрим несколько сценариев его использования.

Глобальный доступ к принтерам. Это первая задача, которую мы реализовали как концепцию IT Self-Service. Допустим, сотрудник из одного офиса приезжает в командировку в другой офис компании и ему нужно распечатать какой-то документ. Раньше ему приходилось сначала спрашивать кого-то из коллег, где в офисе находится ближайший принтер, а затем искать информацию о IP-адресе и других данных устройства, чтобы отправить файл на печать. Для этого нужно было написать запрос в Slack-канал #info-tech; открыть тикет в IT HelpDesk или же посмотреть информацию на внутреннем вики-ресурсе компании. Все варианты занимали время и не прибавляли удобства в работе.

С IT Self-Service задача упростилась: достаточно зайти в раздел портала «Printers» и одним кликом установить себе на компьютер нужный принтер со всеми драйверами и настройками конкретного устройства. Причем каждый принтер подписан в формате «Офис: этаж». Например, «Boston Office: 12th Floor Ricoh C307 Printer».

Софт. Программы всегда под рукой. В результате работы скриптов IT-онбординга каждый сотрудник получает базовый набор приложений, но также существуют ряд опциональных продуктов, которые находятся в IT Self-Service. Кроме того, у нас появляется возможность установки нового программного продукта, который планируется к внедрению внутри компании. Волонтеру, который хочет поучаствовать в процессе бета-тестирования продукта, достаточно зайти в IT Self-Service и одним кликом установить приложение.

И последнее, в IT Self-Service портале есть возможность авторизации пользователя, что позволяет производить точечное таргетирование конкретного программного продукта на определенную фокус-группу.

Упростили рабочие процессы

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

Если б мы все работали в одном офисе, специалисты IT HelpDesk могли бы подойти и лично посмотреть, в чем дело. Но с командой, распределенной по пяти континентам, такой фокус не пройдет.

Поэтому мы посмотрели на IT Self-Service как IT-ресурс компании, который делает жизнь сотрудников лучше, и реализовали:

  • IT Service catalog;
  • VPN Troubleshoot DNS resolution issues;
  • Say Hello to IT Squad (Sysdiagnose).

IT Service catalog. Это микропрограмма IT Self-Service app, которая позволяет пользователю в один клик открыть сервисный каталог внутри HelpDesk компании. Там сотрудники могут разместить заказ, например на доступ к какому-то облачному сервису; заказать требуемую лицензию ПО, дополнительный монитор или аксессуар и многое другое. И для этого даже не нужно открывать браузер и отыскивать веб-адрес ресурса. Один клик по иконке приложения — и вы уже внутри сервисного каталога.

VPN Troubleshoot DNS resolution issues. Мы разработали отдельное приложение для помощи пользователям в работе со сбоями VPN. Приложение находится внутри IT Self-Service и позволяет в один клик получить все требуемые метрики для анализа сетевого соединения на конечной точке, к примеру: nameservers; nslookup; traceroute; ping test и так далее.

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

Say Hello to IT Squad (Sysdiagnose). Sysdiagnose — инструмент реагирования на инциденты macOS, разработанный Apple: сбор данных об устройстве, файлах и системе. Этот инструмент генерирует файлы, которые позволяют IT-отделу исследовать проблемы с удаленным компьютером сотрудника и улучшить IT-инфраструктуру компании.

Сразу после завершения запуска IT Self-Service приложения Sysdiagnose на рабочем столе сотрудника создается файл в виде tar-архива в следующем формате: <sysdiagnose_year.month.day_time._Mac-OS-X_MacBookPro ... tar>. Он содержит всю диагностическую информацию, что в итоге дает возможность значительно оптимизировать время реакции на пользовательский запрос, а также быстро и правильно решить проблему.

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

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

Первое, что делает человек в митинг-руме, — запускает Chrome, открывает Google-календарь, выбирает в расписании свою встречу и переходит по ссылке для начала видеоконференции. Но если предыдущий пользователь этого митинг-рума случайно закрыл браузер и удалил его из Dock-панели или же удалил иконку Sound Volume или Bluetooth из меню, то следующему пользователю может быть сложно найти и открыть приложение. К тому же, если в меню не выведена иконка Bluetooth, человеку не будет понятно, нужно ли заряжать Bluetooth-клавиатуру — он не может быстро войти в настройки, чтобы понять, что не так.

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

И в очередной раз к нам на помощь пришел Jamf, где мы реализовали большинство требований к митинг-румам посредством политик и конфигурационных профилей:

  • Заблокировали иконки ключевых сервисов вроде Zoom, Chrome и Cisco Webex в панеле Dock. Пользователь может добавить любые другие требуемые элементы, но не удалить базовые.
  • Унифицировали обои рабочего стола в митинг-руме (брендирование DataRobot) без возможности пользовательской смены.
  • На Mac mini заблокировали возможность ухода в сон и использование скринсейверов.
  • Политика Jamf в виде скрипта проверяет раз в 15 минут наличие в меню иконок Sound Volume и Bluetooth и возвращает их на место, если человек случайно их удалил.

В планах — реализация проекта по сбору данных об уровнях зарядки аккумуляторов клавиатуры и трекпада с компьютеров Mac mini, которые используются в митинг-румах во всех офисах компании. Политика Jamf будет собирать данные об уровнях заряда аккумуляторов, а также генерировать отчет со списком переговорок, в которых уровень заряда периферийных Bluetooth-устройств ниже критического — и в системе HelpDesk автоматически откроется тикет.

В корне изменили IT-онбординг

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

Были недели, когда в киевском офисе процесс онбординга проходили до 10 новых сотрудников. Наш рекорд — это 100+ подготовленных компьютеров IT-специалистами бостонского офиса, когда Datarobot приобрела компанию Paxata.

Так как у истоков автоматизации процессов IT-онбординга компании стояли классические DevOps-инженеры, то и сценарий подготовки компьютеров для онбординга реализовали с помощью популярной в мире DevOps-системы управления конфигурациями Ansible. Она написанная на Python с использованием декларативного языка разметки YAML. Подход заслуживает уважения, поскольку он решал проблему подготовки компьютеров для обеих платформ macOS/Ubuntu с ветвлением сценария развертывания в зависимости от платформы. Вскоре выяснилось, что в maOS не хватает классического менеджера пакетов (опять же мир Linux), и DevOps-инженеры стали использовать менеджер пакетов Homebrew, который распространяется как свободное ПО с открытым кодом.

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

В результате, вместо концентрации своих усилий на поддержку среды разработки DataRobot application, DevOps-инженеры были вынуждены тратить время на поддержку Ansible-плейбука, часть которого предусматривает установку определенного стандартного списка приложений: Chrome, Firefox, Microsoft Office, Zoom, Tunnelblick, Sublime Text и других. Соответственно, каждый новый релиз macOS не вызывал радости и энтузиазма. За ним стояли долгие часы работы по адаптации существующих скриптов под новую версию, при этом Canonical тоже периодически баловали своих пользователей новыми релизами Ubuntu.

Мы постепенно переосмысливаем процесс онбординга и переносим целые фазы в Jamf.

Сейчас мы в процессе разделения подготовки к онбордингу ноутбуков с macOS на две фазы:

  • установка ПО, которое используют все сотрудники (бизнес и инженеры): Chrome, Microsoft Office, Slack, Tunnelblick, Zoom, Sublime Text и так далее;
  • установка дополнительного ПО для создания и наполнения всеми зависимостями среды разработки, которое используют только девелоперы или DevOps.

Первая фаза — зона ответственности отдела IT, вторая — DevOps team. Первая — для всех, вторая — для инженеров. Первая — Jamf, вторая — Ansible. Хотя в планах поддержка и деплоймент новых, сугубо инженерных зависимостей на конечных точках, уже используемых инженерами. Это будет совместный проект IT и DevOps, где «данные» — зона DevOps, деплоймент — зона ответственности отдела IT, а Jamf — инструмент для доставки и развертывания «контейнера».

К особенностям использования Jamf для процесса подготовки компьютеров следует отнести возможность применения политик. Их область применения (policy scope) — smart-группы, созданные по определенным критериям. А это, в свою очередь, позволяет использовать определенный набор триггеров событий Jamf для запуска политики, скрипта или инсталляции установочного пакета, а возможно и целого сценария, который состоит из многих компонент.

К примеру, по такому сценарию автоматически устанавливается Cortex XDR agent (продукт компании Palo Alto) как следующий шаг после добавления компьютера в Jamf (computer enrollment), так как компьютер автоматически попадает с smart-группу компьютеров, на которых не установлено данное ПО.

В нашем движении по реновации процесса IT-онбординга многое уже сделано, еще больше предстоит сделать.

В ближайших планах — интеграция с сервисом OKTA (single sign-on аутентификация сотрудника при получении первичного доступа к ноутбуку), которая приблизит нас к решению задачи Zero-Touch Provisioning, как наиболее эффективного способа удаленного развертывания компьютеров и мобильных устройств. Это означает, что пользователь будет получать свой ноутбук напрямую со складов компании Apple, то есть устройство вообще не будет попадать к нам в IT-отдел. Другими словами, это возможность отправки неподготовленных устройств удаленным сотрудникам, что значительно ускорит процесс онбординга.

В качестве заключения

Пожалуй, Jamf — это лучшее решение по управлению IT-инфраструктурой, которое мы внедрили за последнее время. Благодаря этому инструменту улучшили автоматизацию внутренних IT-процессов, а также приблизили компанию к соответствию стандартам безопасности CIS Benchmarks.

Очевидно, что реальность внедрения выявила некоторые ограничения и недостатки существующего решения. В определенных моментах мы полностью сошлись во мнении, как и многие другие пользователи Jamf Nation*, что разработчикам Jamf необходимо пересмотреть отдельные части пользовательской навигации и элементы пользовательского интерфейса (Graphical UI design).

* Jamf Nation — крупнейше в мире сообщество IT-менеджеров Apple, где есть возможность пообщаться с другими IT-специалистами, узнавать новое о развертывании устройств Apple и поделиться передовыми или просто идеями друг с другом.

К примеру, основными сущностями в Jamf являются конфигурационные профили и политики, каждая из которых имеет свою область действия (scope). Областью действия политики могут быть как отдельные компьютеры, так и статические или smart-группы с возможностями сложной логики выбора нужного множества объектов для применения политики (<targets> / <limitations> / <exclusions>). Однако не существует явных возможностей визуализации набора политик и конфигурационных профилей в разрезе группы компьютеров.

Вариантов решения этой задачи ровно два. Первый — написание сложного скрипта, к примеру на Bash или Python, который бы включал обработку ряда запросов через Jamf API (с последующей визуализацией, допустим, в виде HTML-файла). Второй — присоединиться к петиции на форуме Jamf Nation о добавлении данного функционала в будущие версии Jamf.

Еще одно «узкое горлышко» — Jamf Patch Management. При всем богатстве функционала IT-администраторам все еще приходится вручную создавать («переупаковывать») пакеты обновлений, например, с помощью Jamf Composer, с последующей загрузкой в Jamf Software Server (JSS). Однако тот, кто решил автоматизировать данный процесс, обратит внимание на стороннее решение AutoPkg — среду автоматизации для упаковки и распространения программного обеспечения macOS, ориентированную на задачи, которые обычно выполняются вручную для подготовки ПО к массовому развертыванию на управляемых клиентах.

Наконец, последний пункт в списке пожеланий: нет встроенной интеграции с системой контроля версий, например, с GitHub. Поэтому в данном случае придется обратить внимание на стороннее решение git2jss. Это асинхронная библиотека Python для простой синхронизации ваших скриптов в Git с вашим JSS, что позволяет IT-администраторам хранить свои скрипты в системе контроля версий для упрощения процесса обновления.

Но позитивные эмоции в конечном счете превалируют над негативом.

Если оценить эффективность внедрения Jamf как решения Mobile Device Management, то это решение принесло такие неожиданные возможности, о которых мы и не задумывались ранее. Эти новые горизонты нам стоит еще осознать.

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

Кроме того, успехи по внедрению проекта Jamf вдохновили нас на старт проекта Ubuntu Landscape, задача которого — реализовать Mobile Device Management для платформы Linux.

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

Похожие статьи:
У листопаді Михайло Федоров оголосив про наміри створити в Україні платформу фрилансерів на кшталт Upwork. За задумом новий...
Every Company is Now a Tech Company Привіт! Я Олег і з 2012 року працюю в тестуванні: почав як Manual QA Engineer, але більшу частину кар’єри...
Привет всем! Май был чрезвычайно насыщен новостями и событиями в Ruby-сообществе. Прежде всего, в мае было несколько...
Привет! Я — Алексей Науменко, .NET Developer в Plarium Kharkiv. Я хочу рассказать о том, как начинал свою карьеру,...
Цього тижня Кабмін звільнив очільника Держспецзв’язку і його заступника. Їм оголосили про...
Яндекс.Метрика