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

Простое объяснение принципов SOLID - 1

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

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

Чтобы понять принципы SOLID, нужно чётко понимать, как использовать интерфейсы. Если у вас такого понимания нет, то сначала почитайте документацию.

Я буду объяснять SOLID самым простым способом, так что новичкам легче будет разобраться. Будем рассматривать принципы один за другим.
Читать полностью »

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

Задача — создание и поддержание еженедельного расписания, такого как расписание уроков в школе или расписание работы врачей и чиновников. Имеется набор слотов, каждый слот — это место в недельном расписании с различными дополнительными параметрами, такими как номер кабинета, имя сотрудника. Требуется построить гибкую систему с полной историей, способную решать задачи типа: создать другое расписание с начала лета, заменить учителя на ближайшие 3 недели, передвинуть расписание с пятницы на субботу из-за праздника.

Напишу, обо что обычно спотыкаются и как это решить, решу задачку о закрашивании полоски, а затем приведу примеры простого бэкенда на node/sequelize и закончу несложным фронтендом на vue/vuex/vuetify/nuxt, где можно будет все это потаскать мышкой и посмотреть, как работает.

Коды выложены на github, развернуто здесь.

Редактор еженедельных расписаний - 1
Читать полностью »

Вы просто не умеете редактировать данные - 1

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

Прочитав статью, вы узнаете, как:

  • организовать структуру данных, чтобы их было удобно редактировать
  • обеспечить «динамизм» вашему UI
  • определять, изменилось ли что-то
  • сохранять историю изменений
  • сделать многопользовательский режим за 5 минут

В конце вас ждет готовый прототип с исходным кодом, демонстрирующим описанный подход.

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

«Как и в случае появления любой новой технологии, рецепт успеха включает в себя сочетание технических знаний, деловой хватки и навыков доставки» — Erik T. Heidt, Gartner Research Vice President

Зачем?

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

Облако

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

Сегодня крупнейшие поставщики облачных сервисов, такие как Microsoft, Amazon, Google, Alibaba, предоставляют вычислительные ресурсы и технологии, с помощью которых решаются самые различные отраслевые задачи, формируются сервисы для индивидуальных потребителей. Развитие облачных тем обусловлено рядом причин, в т.ч. технологических:

  • взрывной рост количества вычислительных устройств,
  • экспоненциальное увеличение объемов данных;
  • возросшие вычислительные мощности и снижение их стоимости,
  • гибкость управления ИТ, развитие технологий виртуализации;
  • доступность сети Интернет и увеличение пропускной способности каналов связи.

Определение Gartner — Cloud Computing

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

Всем привет!

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

Поехали.

Судя по собственному опыту разработки, многие разработчики C/C++ пренебрегают идеей, что IDE может сделать их работу продуктивней. Ведь что может быть лучше, чем простые и быстрые Vim или Emac. Что ж, позвольте продемонстрировать. Эти 10 советов CLion поднимут вас на новый уровень продуктивности, помогут сфокусироваться на важных и сложных задачах, в то время как IDE решит за вас рутинные задачи.

Прежде чем начать, познакомимся с CLion, новой кроссплатформенной IDE для разработки на C и C++, созданной JetBrains. Она изначально поддерживает C и C++, включая стандарт C++11 (с некоторыми небольшими ограничениями), libc++ и Boost. Она корректно обрабатывает макросы и шаблоны, а также работает с GCC или Clang (при работе с Windows понадобится или MinGW/MinGW-w64, или Cygwin), GDB, как встроенный дебаггер, и CMake, как система сборки и проектная модель. В дополнении к C/C++ также можно пользоваться JavaScript, XML, HTML и CSS на том же уровне редактирования кода, используя, например, подсветку синтаксиса, анализ, автодополнение, навигацию и рефакторинг.

10 советов для продуктивности в CLion, кроссплатформенной С-С++ IDE - 1Читать полностью »

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

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

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

Недавно вышел 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).Читать полностью »


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