Рубрика «Совершенный код» - 31

image

Будучи поклонником терминала, я давно хотел написать об этой теме. Кроме того, знание того, как использовать терминал, значительно ускоряет работу.

Моя цель в этой статье — поделиться с вами тем, как я использую терминал при разработке под Android.

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

Тавтологические тесты - 1

Привет! Меня зовут Артём, и большую часть своего рабочего времени я пишу сложные автотесты на Selenium и Cucumber/Calabash. Честно говоря, довольно часто я оказываюсь перед непростым выбором: написать тест, который проверяет конкретную реализацию функциональности (потому что это проще) или тест, который проверяет функциональность (потому что это правильнее, но намного сложнее)? Недавно мне попалась неплохая статья о том, что тесты реализации – это «тавтологические» тесты. И, прочитав её, я уже почти неделю переписываю некоторые тесты в другом ключе. Надеюсь, вас она тоже подтолкнёт к размышлениям.

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

В этой статье я расскажу, как мы написали собственные анализаторы кода и чистим с их помощью нашу кодовую базу .net от наиболее острых / частых косяков. Главный посыл — сделать это довольно просто, не бойтесь писать свои анализаторы для борьбы с именно вашими багами. Вторичный посыл — попробуйте наши анализаторы и сообщите о результатах. Полное руководство я писать не буду, их довольно много в интернете, а вот небольшой обзор, что это как и с какими проблемами я столкнулся, надеюсь, окажется вам полезным.
Читать полностью »

image

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

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

Движение к функциональному программированию началось всерьез примерно десятилетие назад. Мы видели как такие языки как Scala, Clojure и F# стали привлекать внимание. Это движение было больше чем просто обычное восхищение «О, круто, новый язык!». Было что-то действительно побуждающее это движение — или мы так думали.

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

Система управления складом с использованием CQRS и Event Sourcing. Service Layer - 1

В данной статье будет рассмотрен Service Layer в Magento 2 и сервисы (API интерфейсы) для управления сущностями, которые были описаны в предыдущей статье, посвященной проектированию и выделению доменных сущностей для системы управления складом (Inventory).
Читать полностью »

Привет! Предлагаю вашему вниманию свободный перевод статьи «Good code is its own best documentation» от Amit Shekhar.

image

Хороший код, как хорошая шутка — не требует объяснений.
Читать полностью »

Несмотря на то, что проблемы, связанные с дублированием кода, упоминаются довольно часто, актуальность этих проблем из года в год остается почти неизменной. Во многих популярных проектах количество клонов измеряется сотнями или даже тысячами.
В рамках данной статьи мне бы хотелось напомнить, что такое программные клоны, какие они влекут за собой проблемы и как с ними можно бороться. В статье приводятся примеры рефакторинга реальных клонов из популярного фреймворка Spring. В качестве инструментов используются Java 8, IDE IntelliJ IDEA 2017.1 и плагин Duplicate Detector 1.1.

Атака клонов. Как бороться с дублированием кода? - 1

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

Привет! Меня зовут Шелестов Денис. Программировать начал с 7-ми лет. В 16 лет, учась в 9-м классе, основал свой первый стартап – Всемирный рейтинг программистов, на котором сейчас зарегистрировано более 70-ти тысяч кодеров – и на первой же презентации перед инвестором привлек инвестиции. Также являюсь сооснователем еще нескольких интересных бизнесов.

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

У меня дома есть ноутбук как и у Вас, который постоянно подключен к интернету и никогда почти не выключается. Как-то раз я пошел в душ, где задумался о том, что у меня в доме стоит ноутбук, который может хостить 10 сторонних сайтов одновременно. Почему? Потому что максимальная нагрузка на сторонние сайты клиентов была 500-700 в день. И тут меня еще больше осенило. Почти у каждого из нас есть либо полностью неиспользуемые (постоянно) устройства, либо используемые но не всю мощность устройства. Я сейчас говорю про миллионы компьютеров подключенных к сети и находящихся в онлайне. Почему бы не сделать такую систему, в которой серверами будут выступать компьютеры обычных людей?

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

И в первую очередь я подумал — децентрализованный хостингЧитать полностью »

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

Часто сложность в понимании принципа "программируйте на уровне интерфейса" кроется в концентрации на инструменте, а не на смысле. Из-за наличия в Java ключевого слова interface, происходит искажение понимания принципа, и он превращается в "программируйте, используя interface". Так как в Python инструмент в виде ключевого слова interface отсутствует, некоторые питонисты пропускают этот принцип.

В книге Банды Четырех примеры приводятся на Smalltalk и C++. Оба этих языка не имеют ключевого слова interface, но это не мешает авторам применять принцип, используя имеющиеся в распоряжении конструкции языка:

У манипулирования объектами строго через интерфейс абстрактного класса есть два преимущества:

  • клиенту не нужно иметь информации о конкретных типах объектов, которыми он пользуется, при условии, что все они имеют ожидаемый клиентом интерфейс;
  • клиенту необязательно "знать" о классах, с помощью которых реализованы объекты. Клиенту известно только об абстрактном классе (или классах), определяющих интерфейс.

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

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

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


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