Как стать автором
Обновить
2
0
Алексей @LexaZ

IT-инжерен*

Отправить сообщение

Типобезопасность в JavaScript: Flow и TypeScript

Время на прочтение11 мин
Количество просмотров13K
Все, кто имеют дело с разработкой UI в кровавом enterprise наверняка слышали о «типизированном JavaScript», подразумевая под этим «TypeScript от Microsoft». Но кроме этого решения существует как минимум ещё одна распространённая система типизации JS, и тоже от крупного игрока IT-мира. Это flow от Facebook. Из-за личной нелюбви к Microsoft раньше всегда использовал именно flow. Объективно это объяснял хорошей интеграцией с существующими утилитами и простотой перехода.

К сожалению, надо признать, что в 2021 году flow уже значительно проигрывает TypeScript как в популярности, так и в поддержке со стороны самых разных утилит (и библиотек), и пора бы его закопать поставить на полку, и перестать жевать кактус перейти на де-факто стандарт TypeScript. Но под этим хочется на последок сравнить эти технологии, сказать пару (или не пару) прощальных слов flow от Facebook.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии10

Сочиняя ПО: Почему стоит изучать ФП на JavaScript?

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

Эта статья - часть серии статей "Составляя ПО" про функциональное программирование и различные техники создания программ на JavaScript ES6+, начиная с азов. Предыдущая часть: Сочиняя ПО: Введение / Хабр

Забудьте все, что вы знали о JavaScript, и постарайтесь воспринять эту статью так, будто вы начинающий программист. Чтобы помочь вам, мы рассмотрим JavaScipt начиная с самых основ, так, как будто вы никогда не видели JavaScript. Ну а если вы начинающий, то вам повезло. Наконец-то попробуем изучить ES6 и функциональное программирование с нуля! К счастью, все новые концепты будут изучены по ходу дела - но не рассчитывайте слишком уж сильно на это.

Читать далее
Всего голосов 13: ↑8 и ↓5+6
Комментарии27

Бесплатные панели управления серверами в 2021 году

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


Для пользователей Хабра не секрет, что панель управления (ПУ) — это веб-инструмент для администрирования сервера и размещённых на нём сайтов с помощью графического интерфейса. Она упрощает работу с доменами, базами данных, службами и приложениями.
В этой статье рассмотрим актуальные в 2021 году бесплатные панели управления, которые не теряют своей популярности, поскольку более 80% рядовых юзеров не используют и половины функций и возможностей платных ПУ.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии15

Поговорим о централизованном логировании

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

Эта статья – продолжение текста о мониторинге. Здесь предлагаю нам с вами поговорить о роли логов в оценке состояния наблюдаемой площадки, посмотреть, что они способны нам дать, а также затронуть вопрос – «можно ли отрывать логи от метрик?».

По ходу дела я буду возвращаться к некоторым тезисам, высказанным в предыдущей публикации, потому рекомендую предварительно с ней ознакомиться.

Итак, давайте поговорим о логировании.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Тестирование требований: как я нахожу ошибки в бизнес-логике фичи прежде, чем их закодят

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

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

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

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

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

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии26

Юнит-тестирование на PHP в примерах

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

Сегодня юнит-тесты невероятно полезны. Думаю, они есть в большинстве из недавно созданных проектов. Юнит-тесты являются важнейшими в enterprise-приложениях с обилием бизнес-логики, потому что они быстрые и могут сразу сказать нам, корректна ли наша реализация. Однако я часто сталкиваюсь с проблемами, которые связаны с хорошими тестами, хотя те и крайне полезны. Я дам вам несколько советов с примерами, как писать хорошие юнит-тесты.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+25
Комментарии3

Осмысленные интерфейсы

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

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

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

Буквально через два уровня абстракций я оказался в коде, датированном 2016-2017 годами, то есть занялся software archeology. В какой-то момент меня возмутило, что вместо интерфейса репозитория в конструктор класса сервиса была передана реализация. Ещё одним уровнем абстракции ниже оказалось, что это всё-таки был интерфейс, но назывался он просто ContentRepository, а не ContentRepositoryInterface, как написал бы любой адепт ООП и принципов SOLID. Это уже не лезло ни в какие ворота, и я потребовал у архитектора оснований (кстати, рекомендую его статью о том, как мы вдвое ускорили построение лент подписок). Он в свою очередь невозмутимо показал пункт внутренних правил оформления кода, где была проставлена ссылка на статью 2013 года («А» — археология, как и было сказано).

Под катом — перевод этого материала.

Читать далее
Всего голосов 36: ↑33 и ↓3+38
Комментарии10

5 лучших программ для базы знаний

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

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

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

Теперь, как именно можно использовать базу знаний? И каковы преимущества его наличия? Вот лишь некоторые из преимуществ, которые вы получаете, выбирая лучшее программное обеспечение для управления знаниями:

Читать далее
Всего голосов 7: ↑5 и ↓2+7
Комментарии6

Active Record против Data Mapper-а для сохранения данных

Время на прочтение4 мин
Количество просмотров82K
Эти 2 шаблона проектирования описаны в книге Мартина Фаулера «Шаблоны корпоративных приложений» и представляют собой способы работы с сохранением данных в объектно-ориентированном программировании.

Пример шаблона Active Record


class Foo
{
    protected $db;
    public $id;
    public $bar;
     
    public function __construct(PDO $db)
    {
        $this->db = $db;
    }
 
    public function do_something()
    {
        $this->bar .= uniqid();
    }
 
    public function save()
    {
        if ($this->id) {
            $sql = "UPDATE foo SET bar = :bar WHERE id = :id";
            $statement = $this->db->prepare($sql);
            $statement->bindParam("bar", $this->bar);
            $statement->bindParam("id", $this->id);
            $statement->execute();
        }
        else {
            $sql = "INSERT INTO foo (bar) VALUES (:bar)";
            $statement = $this->db->prepare($sql);
            $statement->bindParam("bar", $this->bar);
            $statement->execute();
            $this->id = $this->db->lastInsertId();
        }
    }
}
 
//Insert
$foo = new Foo($db);
$foo->bar = 'baz';
$foo->save();

В этом упрощенном примере, дескриптор базы данных вводится в конструкторе Foo (Использование инъекции зависимостей здесь позволяет тестировать объект без использования реальной базы данных), и Foo использует его, чтобы сохранять свои данные. Do_something — просто метод-заглушка, заменяющий бизнес логику.
Читать дальше →
Всего голосов 41: ↑36 и ↓5+31
Комментарии62

Выгорание — норма? Часть 1

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

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


Вводная часть


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


Мне важно, чтобы изложенным материалом было потом удобно пользоваться, как мне самой, так и читателям. Поэтому я решила написать цикл статей, и разложить всё по полочкам в том объеме, который потребуется для достаточного погружения.


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


Читать дальше →
Всего голосов 38: ↑33 и ↓5+42
Комментарии70

Часть 3. MPI — Как процессы общаются? Сообщения типа точка-точка

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

В этом цикле статей речь идет о параллельном программировании с использованием MPI.

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

Окунуться в процесс
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

Корневой сертификат удостоверяющего центра Active Directory на станции Linux

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

Задача  - Корневой сертификат удостоверяющего центра AD-CA на Linux

Условие 1. поднять PKI-AD, при этом корневой центр сертификации должен быть установлен на отдельной станции ROOT-CA.

Условие 2. так как станция ROOT-CA используется крайне ограниченные время и только на выпуск CRT и CRL, то на 99% станция находится отключенном состоянии, бюджет на данную станцию равен нулю.

 

Читать далее
Всего голосов 8: ↑4 и ↓4+3
Комментарии13

#003 Делегирование. Основы

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

Продолжаю потихоньку публиковать избранные параграфы из книжки Управление digital-проектами. Ссылки на предыдущие части — в конце материала.

Делегирование — это передача части полномочий или ответственности другим людям. Как правило — своим подчиненным.

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

Делегирование — ахиллесова пята российского менеджмента. Руководители делегируют плохо, боятся или ленятся это делать. Многие просто не умеют, поскольку делегированию, как и вождению автомобиля, нужно учиться. Менеджер, который не умеет делегировать — бутылочное горлышко организации: он набирает на себя слишком много задач и стремится большую их часть сделать самостоятельно. Грамотное делегирование — это точка роста организации.

Читать далее
Всего голосов 2: ↑1 и ↓10
Комментарии2

Рендеринг в веб

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

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

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Основы JavaScript: почему вы должны знать, как работает JS-движок

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

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

Ниже вы увидите однострочную функцию, которая возвращает свойство lastName переданного аргумента. Просто добавив одно свойство к каждому объекту, мы получим падение производительности более чем на 700%!

Объясню подробнее почему так происходит. Отсутствие статической типизации в JavaScript приводит к такому поведению. Если рассматривать это как преимущество перед другими языками, такими как C# или Java, то в данном случае получается скорее "Faustian bargain" ("Фаустовская сделка". Жертвование духовных ценностей ради материальных выгод; происхождение выражения связано с именем Дж. Фауста).

Читать далее
Всего голосов 10: ↑7 и ↓3+5
Комментарии16

Полезные материалы для разработчика

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

Существует много полезных инструментов, которые помогают автоматизировать рутинную работу и тем самым облегчить жизнь разработчика. 

Выпускнику и преподавателю Computer Science Center, Равилю Галееву, пришла идея собрать такие инструменты и технологии в один курс и познакомить студентов с ними. За пример такого курса были взяты The Missing Semester of Your CS Education от MITSoftware Carpentry и cs50.

В этом посте мы собрали видеолекции курса «Практический минимум» и материалы к занятиям. Благодарим Равиля за подборку! 

Читать далее
Всего голосов 7: ↑6 и ↓1+8
Комментарии0

Еще немного про сервисный слой в PHP

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

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

Сегодня мы поговорим об одном из способов организации бизнес логики - сервисном слое (он же service layer), когда и зачем его нужно применять, а также какие проблемы архитектуры он поможет решить. Примеры реализации будут показаны с использованием архитектурного паттерна MVC и фреймворка Laravel.

Читать далее
Всего голосов 10: ↑8 и ↓2+14
Комментарии19

Когда объектов не достаточно

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

Я искал материалы об истоках объектно-ориентированного программирования. Причина была в том, что в сообществе Laravel возникла тенденция использовать паттерн Action и говорить вот что такое «настоящее ООП». У меня возникли некоторые сомнения, и вместо того, чтобы задавать вопросы, я решил поискать ссылки времён Smalltalk. Нашёл книгу Smalltalk, Objects, and Design. И мне было так интересно её читать, что я решил поделиться с вами своими находками.

Паттерн Action гласит, что логику нужно обёртывать в классы Action. Эта идея не нова, в других сообществах продвигалась «Чистая архитектура», при которой каждый «сценарий использования» (или Interactor) должен являться самостоятельным классом. Всё очень просто. Но об этом ли говорит ООП?

Если вам интересна суть статьи, то:

  • Smalltalk был одним из первых ООП-языков. Он стал источником таких концепций, как наследование и обмен сообщениями (или как минимум он их популяризировал, насколько я вижу).
  • Как сказал Алан Кей, придумавший термин «объектно-ориентированное программирование», объектов не достаточно. Они не обеспечивают нам архитектуру. Объекты — это про взаимодействие между ними, и в случае с большими системами вам нужна возможность разделения приложения на модули, которые можно отключать по отдельности, заменять и включать снова в общую систему, не кладя при этом всё приложение. В этом контексте Алан предлагает идею инкапсуляции «сообщений» в классы, когда каждый экземпляр является сообщением в системе, подкрепляя идею наличия в Чистой архитектуре классов «Action» или «интеракторов».

Продолжайте читать, если я разжёг в вас интерес.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+32
Комментарии6

От внедрения зависимостей к отказу от зависимостей

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

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



Марк Симан — автор популярной книги Dependency Injection in .NET, автор бесчисленных блог-постов. На DotNext 2017 Moscow Марк рассмотрел применение dependency injection в классическом объектно-ориентированном дизайне и объяснил, почему его необязательно (даже нежелательно) использовать в функциональном программировании. Следом за этим он наглядно показал, как использование приемов функционального программирования устраняет необходимость в использовании моков и стабов в модульном тестировании и позволяет полностью выбросить мусор из прямого перечисления зависимостей.


Под катом — перевод доклада и видео. Далее повествование будет от лица Марка.

Всего голосов 35: ↑35 и ↓0+35
Комментарии11

JavaScript prototype pollution: практика поиска и эксплуатации

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

Если вы следите за отчетами исследователей, которые участвуют в bug bounty программах, то наверняка знаете про категорию уязвимостей JavaScript prototype pollution. А если не следите и встречаете это словосочетание впервые, то предлагаю вам закрыть этот пробел, ведь эта уязвимость может привести к полной компрометации сервера и клиента. Наверняка хотя бы один продуктов вашей (или не вашей) компании работает на JavaScript: клиентская часть веб-приложения, десктоп (Electron), сервер (NodeJS) или мобильное приложение.


Эта статья поможет вам погрузиться в тему prototype pollution. В разделах Особенности JavaScript и Что такое prototype pollution? вы узнаете как работают объекты и прототипы JavaScript и как особенности их функционирования могут привести к уязвимостям. В разделах Prototype pollution на сервере и Prototype pollution на клиенте вы научитесь искать и эксплуатировать эту уязвимость на кейсах из реального мира. Наконец вы изучите способы защиты и почему самый распространенный способ защиты можно легко обойти.


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

Читать дальше →
Всего голосов 15: ↑14 и ↓1+18
Комментарии8

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность