Рубрика «Программирование» - 403

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

Каждый программист старается писать хороший код. Читабельность — один из главных признаков такого кода. О ней написано достаточно много книг, но всё же в теме есть пробелы. Например, те самые книги сфокусированы больше на советах КАК написать читабельный код, а не на причинах того, почему один код является хорошо читабельным, а другой — нет. Книга говорит нам «используйте подходящие названия переменных» — но что делает одно название более подходящим, чем другое? Работает ли это для всех примеров подобного кода? Работает ли это для всех программистов, которым попадётся на глаза этот код? Как раз о последнем я и хотел бы поговорить чуть детальнее. Давайте погрузимся немного в человеческую психику. Наш мозг — главный наш инструмент, хорошо бы изучить специфику его работы.

Читать полностью »

Недавно вышел Qt 5.11 и мне подумалось, что сейчас самое время обновить до него кое-какие мои проектики на Qt 1.0… Ладно, шучу :) На самом деле мне стало интересно, насколько хорошо за все эти годы развития фреймворка Qt нам удавалось сохранять обратную совместимость кода.

Qt гарантирует совместимость на уровне кода и бинарников при обновлении между минорными версиями фреймворка (и мы серьёзно относимся к этому обещанию). Вы не должны переписывать (или даже перекомпилировать) свой код при переходе на другую минорную версию Qt. Однако переходы между мажорными версиями требовали от нас идти на некоторые жертвы ради прогресса. С релиза Qt 1.0 в 1996 году мы ломали совместимость кода четыре раза: в версиях 2.0, 3.0, 4.0 (ох, это было болезненно!) и 5.0.

Мы старались даже в мажорных версиях сломать как можно меньше всего, но всё же это приходилось делать. Отсюда возникает вопрос: насколько сложно портировать приложение, написанное во времена Qt 1.0 до современного Qt 5.11?

Для ответа на этот вопрос я взял пример кода, который поставлялся с документацией на Qt 1.0 и постарался собрать его с помощью Qt 5. Наши публичные архивы содержат изменения начиная с версии 1.41, так что мне пришлось изрядно покопаться в дрейнейшей истории, пройти через логи четырёх разных систем контроля версий… но это я уже отвлекаюсь. Проект, который я планирую собрать, называется «t14» — поскольку это иллюстрация к 14-ой (и последней) главе оригинального руководства.

И вот, что мне пришлось проделать для его сборки.
Читать полностью »

Совместно с МАИ Авито открывает магистратуру «Проектирование высоконагруженных интернет-сервисов», обучение начнётся уже в сентябре 2018 года. Зачем туда поступать и в чём основные фишки, рассказываем в этой статье. Под катом можно также познакомиться с преподавателями и зарегистрироваться на вебинар, посвящённый учебной программе.

Highload-магистратура: качаем матчасть - 1

Читать полностью »

Сегодня у нас начало новой серии статей! Да-да, не удивляйтесь. В этот раз основная тема — разработка игр. Поговорим о такой программе, как Clickteam Fusion 2.5 и попробуем создать в ней проект и сборку под UWP. Но сначала — обзор платформы, уже вышедших на ней игр (среди них FNAF) и интервью с разработчиками. Заглядывайте под кат!

Разработка без программирования: извращение или лайфхак? - 1Читать полностью »

Внедрение зависимостей в Go - 1

Недавно я создал небольшой проект на языке Go. После нескольких лет работы с Java я был сильно удивлён тем, как вяло внедрение зависимостей (Dependency Injection, DI) применяется в экосистеме Go. Для своего проекта я решил использовать библиотеку dig от компании Uber, и она меня по-настоящему впечатлила.

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

В этой статье я расскажу об основах внедрения зависимостей, а также покажу пример приложения до и после применения этого механизма (посредством библиотеки dig).Читать полностью »

В этом году мы снова бесплатно транслируем главный зал фестиваля конференций РИТ++. Во второй день в главном зале Node.JS и асинхронный JavaScript, статистика для разработчика, путь от 1 до 30 релизов в неделю, в поисках идеального CI-пайплайна, гитхаб и профессиональное выгорание.

Трансляция первого дня РИТ++ в YouTube

Трансляция второго дня РИТ++ в YouTube

@RITFestStream — медиа-стрим из главного зала, всё самое интересное в главном зале, выводы из докладов, самые ключевые мысли и прикольные фотографии!

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

Сегодня начинаем в 11:00, полное расписание доступно на сайте, а ниже самые интересные доклады, которые сможет увидеть любой желающий!
Читать полностью »

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

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

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

Вредные советы: как превратить автоматизацию UI-тестов в кошмар - 1

Привет! Меня зовут Артём, и я занимаюсь автоматизацией тестирования. Антипаттерны в разработке — довольно популярная тема. Но ведь в тестировании тоже есть свои "плохие советы", и они довольно забавно пересекаются с разработкой. Недавно мне на глаза попалась ироничная статья про антипаттерны в тестировании. Вашему вниманию!

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

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

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

Итак, поехали.

Читать полностью »

Использование std::optional в С++17 - 1

Давайте возьмём пару от двух типов <YourType, bool> — что вы можете сделать с композицией подобного рода?

В этой статье я расскажу вам про std::optional — новый вспомогательный тип, добавленный в C++17. Это обёртка для вашего типа и флаг показывает, инициализировано ваше значение или нет. Давайте посмотрим, где это может быть полезно.

Вступление

Добавлением логических флагов к другим типам вы можете достичь то, что называется "Nullable типы". Как было сказано ранее, флаг используется для обозначения того, доступно значение или нет. Такая обёртка выразительно представляет объект, который может быть пустым (не через комментарии :).

Читать полностью »

Рефакторинг с использованием C++17 std::optional - 1

В разработке существует множество ситуаций, когда вам надо выразить что-то с помощью "optional" — объекта, который может содержать какое-либо значение, а может и не содержать. Вы можете реализовать опциональный тип с помощью нескольких вариантов, но с помощью C++17 вы сможете реализовать это с помощью наиболее удобного варианта: std::optional.

Сегодня я приготовил для вас одну задачу по рефакторингу, на который вы сможете научиться тому, как применять новую возможность C++17.

Вступление

Давайте быстро погрузимся в код.

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js