Все потоки
Поиск
Написать публикацию
Обновить
1096.94

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Универсальная работа с VCS/SCM в рамках автоматизации с FutoIn CID

Время на прочтение6 мин
Количество просмотров2.2K

use cases


Для некоторых современных программистов не существует систем контроля версий кроме Git, но на практике Subversion всё ещё востребован, а Mercurial имеет своих ярых сторонников. Быстрый поиск в подкрепление.


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

Читать дальше →

Передача намерений

Время на прочтение5 мин
Количество просмотров8.2K

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


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

Читать дальше →

Выбор MQ для высоконагруженного проекта

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

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

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

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

Как сделать свой С++ код кроссплатформенным?

Время на прочтение12 мин
Количество просмотров39K
Возможно, кто-то, прочитав заголовок, спросит: «Зачем что-то делать со своим кодом?! Ведь С++ кроссплатформенный язык!». В целом, это так… но только пока нигде нет завязок на специфичные возможности компилятора и целевой платформы…

В реальной жизни разработчики, решающие конкретную задачу под конкретную платформу, редко задаются вопросом «А точно ли это соответствует Стандарту С++? А вдруг это расширение моего компилятора». Они пишут код, запускают сборку и чинят места, на которые выругался их компилятор.

В итоге получаем приложение, которое, в некоторой степени, «заточено» под конкретный компилятор (и даже под его конкретную версию!) и целевую ОС. Более того, из-за скудности стандартной библиотеки С++ некоторые вещи просто невозможно написать, не воспользовавшись специфичным API системы.

Так было и у нас в Тензоре. Мы писали на MS Visual Studio 2010. Наши продукты были 32-х битными Windows-приложениями. И, само собой, код был пронизан всевозможными завязками на технологии от Microsoft. Однажды мы решили, что пора осваивать новые горизонты: пора научить СБИС работать под Linux и другими ОС, пора попробовать перейти на другое «железо» (POWER).

В данном цикле статей я расскажу, как мы сделали свои продукты настоящими кроссплатформенными приложениями; как заставили их работать на Linux, MacOS и даже под iOS и Android; как запустили свои приложения на множестве аппаратных архитектур (x86-64, POWER, ARM и другие); как научили работать на big-endian машинах.

Нативные ECMAScript модули — первый обзор

Время на прочтение11 мин
Количество просмотров33K
Бандлеры и компайлеры против нативных модулей

В этой статье хочу поделиться переводом статьи о нативных ECMAScript модулях, которые все больше и больше обсуждаются среди фронтендеров. Javascript ранее никогда не поддерживал нативно работу с модулями, и нам, фронтендерам, всегда приходилось использовать дополнительные инструменты для работы с модулями. Но вы только представьте, что в скором времени не нужно будет использовать Webpack для создания бандлов модулей. Представьте мир, в котором браузер будет собирать все за вас. Подробнее об этих перспективах я и хочу рассказать.
Читать дальше →

Пишем Telegram-бота на Rust, который будет запускать код на… Rust?

Время на прочтение7 мин
Количество просмотров47K

Доброй ночи! Сегодня хотелось бы кратко рассказать о том, как написать Telegram-бота на Rust, который будет запускать код на Rust. У статьи нет цели произвести полное погружение в API telegram_bot, Serde, Telegram или в нюансы разработки на Rust. Она скорее носит ознакомительный характер. Числа Пеано с помощью системы типов складывать не будем.
Превью к статье


Хотел складывать числа Пеано, но ладно, давай своего бота...

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

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

Больше изоленты!


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

Читать дальше →

Новости онлайн-курсов Mail.Ru Group: перезапуск «Углублённого программирования на С++»

Время на прочтение3 мин
Количество просмотров10K

image


17 апреля мы перезапустили онлайн-курс «Углублённое программирование на С/С++» на платформе Stepik. Это курс для тех, кто знает С++ и хочет научиться использовать его в промышленной разработке. Мы упростили доступ к модулям, чтобы вы прошли курс в удобное время и получили сертификат. Но обо всём по порядку.

GoTo MeetUp: Security by Default

Время на прочтение4 мин
Количество просмотров3.3K

Информационная безопасность — это важно; впрочем, это знание мало кому помогает. Количество соединенных general-purpose компьютеров (==сложность) растёт каждый день, происходят очень реальные инциденты от Heart или Cloudbleed до Stuxnet или проблем с бортовым компьютером Toyota (когда машина не останавливается), и ситуация не становится лучше сама по себе. Становится хуже, потому что "интернет вещей" — это стартапы, делающие физическую инфраструктуру типа лампочек или дверных замков (разработчики SCADA плачут кровавыми слезами). Потому что огромное количество кода пишется на memory-unsafe языках. Потому что образование разработчиков — это, как правило, либо про фичи (проекты / этожпрототип), либо про фундаментальные алгоритмы (что не помогает пониманию того, что система работает не в вакууме).


Кажется, что основных корней проблемы два: это небезопасный инструментарий — например, ЯП (C/C++) и библиотеки (OpenSSL), и люди. Люди забывают про ИБ, думают "выпустим что-нибудь, а потом разберёмся", не понимают tradeoff'ы своих инструментов (то, что "C — это быстро", знают все, а вот про memory unsafety и масштаб UB — немногие), etc. Первая проблема сейчас решается сообществом: разрабатываются безопасные языки типа Rust и простые, понятные библиотеки типа TweetNaCl. Остаётся вторая (ведь хорошим инструментам надо ещё научить, как и соответствующему мышлению).


Поэтому мы проводим митап по информационной безопасности Security by Default.

Читать дальше →

Фильм «Скрытые фигуры»: задачи из фильма и современный подход к расчетам орбиты и возвращения на Землю

Время на прочтение10 мин
Количество просмотров13K

Перевод поста Джеффри Брайанта (Jeffrey Bryant), Пако Джейна (Paco Jain) и Майкл Тротта (Michael Trott) "Hidden Figures: Modern Approaches to Orbit and Reentry Calculations".
Код, приведенный в статье, можно скачать здесь.
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации



Содержание


Размещение спутника в определенном месте
Константы и первичная обработка
Вычисления
Построение графика
Как рассчитываются орбиты сегодня
Моделирование возвращаемого спутника



Вышедший недавно в кинотеатрах фильм Скрытые фигуры получил хорошие отзывы. Действие разворачивается в важный период истории США; в нем затрагивается также ряд тем вроде гражданских прав и космической гонки. В центре повествования — история Кэтрин Джонсон и ее коллег (Дороти Воган и Мэри Джексон) из NASA в период развертывания программы Меркурий и ранних исследований пилотируемых космических полетов. Внимание также акцентируется на драматической борьбе за гражданские права афро-американских женщин в NASA, происходившей в то время. Компьютеры в то время едва появились, так что способность Джонсон и ее коллег решать сложные навигационные задачи орбитальной механики без использования компьютера обеспечили важную проверку ранних компьютерных результатов.



Я остановлюсь на двух аспектах ее научной работы, упомянутых в фильме: вычислениях орбиты и расчетах, связанных с вхождением в атмосферу. Для орбитальных вычислений я сначала сделал ровно то же, что и Джонсон, а затем применил более современный прямой подход с использованием инструментов Wolfram Language. В фильме упоминается о решении дифференциальных уравнений методом Эйлера; я же буду сравнивать этот метод с более современным и вычислю возвратную траекторию с помощью данных модели атмосферы, полученных непосредственно из Wolfram Language).
Читать дальше →

Питерский бездомный — в Праге. Продолжение истории разработчика-самоучки

Время на прочтение8 мин
Количество просмотров34K
Что бы вы ответили на вопрос работодателя: «Готовы ли вы переехать в наш новый офис в другой стране?». Скорее всего, правильно было бы уточнить, в какую конкретно страну, на каких условиях и что-то еще в таком духе. Потом начать изучать законодательство, штудировать форумы, задавать вопросы, переживать по поводу транспортировки вещей, разбираться в особенностях местной ипотеки, строить планы на 10 лет вперед, волноваться, начать пить и курить или бросить пить и курить.

Все люди разные и у всех разные мотивы, а я просто никогда не был за границей.
«Да», — ответил я.

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

В общем, прошло 1,5 года, я переехал в новый R&D офис Veeam Software в Чехии и пишу продолжение своей истории. Вдруг кого-то заинтересует мой опыт релокации, налаживания быта и работы в другой стране.
Читать дальше →

Запись WebRTC видеопотока с веб-камеры браузера с буксировкой на Amazon S3

Время на прочтение6 мин
Количество просмотров8.5K

Amazon S3 — это файловое облачное хранилище, которое используют такие известные сервисы как Dropbox, Trello и миллионы других проектов. Несмотря на сбой 28 февраля 2017 года, в результате которого кое-где перестали работать даже холодильники, S3 остается, пожалуй, самым популярным распределенным хранилищем, в котором пользователи и бизнес хранят фотки, видео, бэкапы и другой полезный контент.

Web Call Server — это медиасервер с поддержкой технологии WebRTC и записи видеопотоков из браузеров и мобильных устройств. HTML страница в браузере или мобильное приложение может захватить видеопоток с веб-камеры и отправить на сервер для дальнейшей ретрансляции и записи.

В этой статье мы расскажем как записать видеопоток со страницы браузера Google Chrome с последующей отправкой mp4-файла в хранилище Amazon S3.
Читать дальше →

iThink — первая iOS-конференция от NIX Solutions в Харькове

Время на прочтение2 мин
Количество просмотров2.4K


Приглашаем вас в iThink — уже пятое сообщество от NIX Solutions! Впереди первая конференция, и мы приглашаем как начинающих, так и опытных разработчиков присоединиться к нашему iOS-комьюнити. На встрече вы сможете познакомиться и пообщаться с четырьмя экспертами iOS-разработки, прокачаться в трех актуальных темах, узнать много нового и устроить себе насыщенный вечер пятницы.
Читать дальше →

Ближайшие события

Композиция протоколов для инъекции зависимостей

Время на прочтение3 мин
Количество просмотров8K

Мне нравится использовать композицию и инъекцию зависимостей, но когда каждая сущность начинает инъектится несколькими зависимости, получается некое нагромождение.


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


Но есть более управляемый способ.


Читать дальше →

Книга «Экстремальное программирование: разработка через тестирование»

Время на прочтение7 мин
Количество просмотров45K
image Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development — разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой методики. В книге приведены два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования.
Читать дальше →

Своя криптовалюта на ethereum

Время на прочтение4 мин
Количество просмотров90K


Общая рыночная капитализация глобального рынка криптовалют за последний год выросла с $6 млрд (в январе 2016 года) до $28 млрд (на текущий момент). С начала 2017 года рынок криптовалют вырос примерно в полтора раза. На биржах торгуются уже больше сотни разных криптовалют. Крупные организации объединяются в консорциумы, чтобы выпускать свою валюту. Даже государства делают свои национальные криптовалюты. Технологии блокчейна дошли до такого уровня, что уже почти любой может запустить свою криптовалюту, чем мы в этой статье и займемся. Легче всего создать свои монеты на смарт контрактах на базе ethereum.

Читать дальше →

Свои потоки ввода-вывода в C++ с помощью std::streambuf

Время на прочтение16 мин
Количество просмотров87K
В статье на примерах объясняется, как реализовать поддержку потокового ввода-вывода из стандартной библиотеки (<iostream>) для своих классов.

В тексте статьи будет часто встречаться слово «поток», что означает именно поток ввода-вывода ((i/o)stream), но не поток выполнения (thread). Потоки выполнения в статье не рассматриваются.


Введение


Потоки из стандартной библиотеки — мощный инструмент. Аргументом функции можно указать поток, и это обеспечивает ее универсальность: она может работать как со стандартными файлами (fstream) и консолью (cin/cout), так и с сокетами и COM-портами, если найти соответствующую библиотеку.

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

Генератор тестовых данных для C++

Время на прочтение4 мин
Количество просмотров10K

image


При unit-тестированиии кода рано или поздно встает вопрос тестовых данных. И если в одном случае достаточно просто несколько жестко зашитых переменных, то в других случаях необходимы сколько-нибудь большие и случайные данные. В управляемом мире нет проблем с генерацией пользовательских типов (взять тот же Autofixture), но мир C++ зачастую вызывает боль и страдание (поправьте меня, если это не так). Не так давно я познакомился с замечательной библиотекой boost::di и под ее влиянием у меня начала созревать идея библиотеки, которая позволила бы C++ программистам генерировать пользовательские типы данных, забитых случайными значаниями, и это не потребовало бы предварительного их описания. Получилось что-то вроде:


struct dummy_member{
    float a;
    int b;
};
struct dummy{
    explicit dummy(dummy_member val, std::string c) : val_(val), c_(c) {}
private:
    dummy_member val_;
    std::string c_;
};
int main(int argc, char* argv){
    auto d = datagen::random<dummy>();
    return 0;
}

Ссылка на код. Библиотека header-only,C++14. Всех интересующихся прошу под кат.

Читать дальше →

Генератор проектов

Время на прочтение21 мин
Количество просмотров15K
В данной статье речь пойдет о специфическом программном продукте, предназначенном для разработки больших программно-информационных комплексов. Этот продукт называется «Генератор проектов», и в его основе лежит инструментальный подход к программированию, когда сам процесс разработки программных систем рассматривается как объект автоматизации. Эта тема была довольно модной где-то в 70-80-х годах прошлого века, но на наш взгляд, такой подход не устарел и сегодня. По крайней мере, нашему творческому коллективу долгие годы удавалось разрабатывать промышленные автоматизированные системы различного назначения с помощью собственного инструментария.

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

N причин, чтобы использовать Create React App

Время на прочтение10 мин
Количество просмотров78K


Create React App — отличный инструмент для быстрого старта React-приложений. Вы не тратите время на настройку Webpack, Babel и других привычных инструментов. Они заранее настроены и спрятаны, так что разработчики могут сфокусироваться на коде и бизнес-логике приложения.
Читать дальше →

Вклад авторов