Как стать автором
Обновить
-20
0

Пользователь

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

Разворачиваем автоматизацию за пару часов: TypeScript, Protractor, Jasmine

Время на прочтение10 мин
Количество просмотров36K
Привет, Хабр!

Меня зовут Виталий Котов, я довольно много занимаюсь автоматизацией тестирования и мне это нравится. Недавно я участвовал в проекте по настройке автоматизации «с нуля» на стеке TypeScript + Protractor + Jasmine. Для меня этот стек был новым и необходимую информацию я искал на просторах интернета.

Самые полезные и толковые мануалы мне удалось найти только на английском языке. Я решил, что на русском тоже надо такой сделать. Расскажу только основы: почему именно такой стек, что надо настроить и как выглядит самый простой тест.

Сразу оговорюсь, что довольно редко работаю с NodeJS, npm и в целом с серверным JavaScript (тем более с TypeScript). Если где-то найдете ошибку в терминологии или какое-то из моих решений можно улучшить — буду рад узнать об этом в комментариях от более опытных ребят.

К слову, у меня уже была подобная статья: «Разворачиваем автоматизацию за пару часов: PHPUnit, Selenium, Composer».


Читать дальше →
Всего голосов 30: ↑29 и ↓1+28
Комментарии17

Ускоряем сборку веб-приложения с webpack

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

По мере того как ваше приложение развивается и растёт, увеличивается и время его сборки — от нескольких минут при пересборке в development-режиме до десятков минут при «холодной» production-сборке. Это совершенно неприемлемо. Мы, разработчики, не любим переключать контекст в ожидании готовности бандла и хотим получать фидбек от приложения как можно раньше — в идеале за то время, пока переключаемся с IDE на браузер.


Как этого достичь? Что мы можем сделать, чтобы оптимизировать время сборки?


Эта статья — обзор существующих в экосистеме webpack инструментов для ускорения сборки, опыт их применения и советы.


Оптимизации размера бандла и производительности самого приложения в этой статье не рассматриваются.

Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии10

Производительность анимаций на сайтах

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

image


При разработке сайтов, выходящих за рамки условного бутстрапа, рано или поздно возникают вопросы, связанные с производительностью анимаций. Особенно важными они являются в дизайнерских сайтах, вроде тех, что попадают в каталоги Awwwards, FWA, CSS Design Awards и.т.д. При этом часто задача создания анимаций и последующей оптимизации, если она будет нужна, ложится на плечи не очень опытных разработчиков, которые даже не знают с чего начать. Обычно все это выливается в тормозящие сайты, которыми невозможно пользоваться, и последующее негативное отношение ко всему классу таких проектов. В этой статье мы постараемся разобрать, где находится граница приемлемой производительности анимаций, какие узкие места часто встречаются и куда смотреть в инструментах разработчика в первую очередь.

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

Практические задачи по Java — для курсов и прочих занятий

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

Практические задачи по Java — для курсов и прочих занятий


Несколько вводных слов


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

Дело в том, что каждое моё занятие состоит из двух частей. На первой я выступаю в роли лектора — рассказываю с примерами кода о какой-то новой теме (классы, наследование, дженерики и так далее). Вторая часть — практическая. Очевидно, что нет смысла просто рассуждать о программировании, надо программировать. Приоритет на занятиях — решение задач, то есть программирование чего-то как-то. Программирование на занятиях отличается от программирования дома, так как на занятиях можно задать вопрос, показать код, получить быструю оценку кода, комментарии по улучшению, исправлению написанного. Очень легко было найти задачи для самых первых занятий. Задачи на циклы, условные операторы, и ООП (к примеру, написать класс «Собака» или класс «Вектор»). Сервисы вроде leetcode позволяют даже проверить правильность решения таких задач сразу, онлайн. Но какие задачи дать студентам на занятии, которое было посвящено коллекциям? Потокам? А аннотациям? За несколько лет я придумал, или переработал несколько таких задач, и эта статья, по сути, является сборником этих задач (к некоторым задачам прилагается решение).
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии20

Пишем HTTP/1.1 & HTTP/2 клиент и сервер на Golang

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


Golang — отличный язык программирования с широким спектром возможностей. В этой статье показано, как на Go можно написать клиент и сервер для протоколов HTTP/1.1 и HTTP/2.
Читать дальше →
Всего голосов 53: ↑37 и ↓16+21
Комментарии4

Как выполнить 70 задач за день: жизнь в таск-трекерах — хорошая жизнь

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


Систематически вести задачи я пытался, наверное, раз 20-25. И каждая попытка срывалась, как теперь я понимаю, по двум причинам.

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

Любую работу сложно вести, когда ты не понимаешь, для чего. «Упорядочить жизнь» — не самая адекватная цель, так как «упорядоченная жизнь» — это достаточно размытое явление. А вот «снизить уровень тревоги, снизив уровень неизвестности» — цель гораздо конкретнее и лучше, на которую вполне можно потратить час в день.

Во-вторых, все методологии, которые я читал, описывают сразу конечное состояние процесса. «Вам нужно взять ToDoIst, разбить по проектам, интегрировать с календарем, делать ревью задач за неделю, приоритезировать их…» Это сложно начать делать сразу. Как и в программной разработке, я считаю, что нужно пользоваться методом прогрессивного джпега — итеративно.

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

А как я к этому пришёл, можно прочитать здесь.
Читать дальше →
Всего голосов 52: ↑40 и ↓12+28
Комментарии54

Автоматизация библиотек на Typescript

Время на прочтение5 мин
Количество просмотров3.4K
Хочу сразу оговориться: эта статья не дает готового к использованию рецепта. Это скорее моя история путешествия в мир Typescript и NodeJS, а также результаты моих экспериментов. Тем не менее, в конце статьи будет ссылка на GitLab репозиторий, который вы можете посмотреть, и может быть взять что то понравившееся себе на вооружение. Может быть даже по моему опыту создадите свое автоматизированное решение.
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии4

Docker: вредные советы

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


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


Читаешь детям «Вредные советы» Григория Остера, и видишь, как легко и непринужденно до них доходит, что так делать нельзя.


О том, как правильно писать Dockerfile, написана куча статей. Но мне не попадалось инструкций, как писать неправильные Dockerfile. Восполняю этот пробел. И, может быть, в проектах, которые я получаю на поддержку, таких докерфайлов станет меньше.

Читать дальше →
Всего голосов 70: ↑51 и ↓19+32
Комментарии66

Grid или Flexbox?

Время на прочтение8 мин
Количество просмотров50K
Мишель Баркер, автор материала, перевод которого мы сегодня публикуем, говорит, что недавнее обсуждение в Twitter, начатое Крисом Койером, заставило её задуматься о том, как веб-разработчики делают выбор между технологиями CSS Grid Layout и CSS Flexbox Layout при разработке макетов.



Крис Койер в своём твите задал аудитории вопрос о том, как те, кто знает о том, что такое Grid и Flexbox, предпочитают объяснять разницу между этими технологиями.

Среди ответов на этот вопрос, что, по словам Мишель, вполне ожидаемо, можно было отметить ценные идеи Рэйчел Эндрю и Джен Симмонс.
Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии6

Аппликативные регулярные выражения, как свободный альтернативный функтор

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

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


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

Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии5

Сборка БЭМ-проекта при помощи Webpack

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

В статье речь пойдет о сборке БЭМ-проектов с помощью бандлера Webpack. Я покажу один из примеров конфигурации, не нагружая читателей лишними сущностями.


Материал подойдет тем, кто только начинает знакомство с БЭМ. Сначала коснемся теоретических аспектов методологии, а в разделе «Практика» я покажу, как их можно применить.

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

Принципы построения REST JSON API

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

Эта памятка писалась для внутренних нужд (открыть глаза менее опытным в вебе коллегам). Но, т.к. я насмотрелся велосипедов от довольно уважаемых, казалось бы, контор, — выкладываю на хабр. Мне кажется, многим будет полезно.


Зачем


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


  • Стандарт HTTP это стандарт. Его несоблюдение вредно для кармы и ведёт к постоянным проблемам с безопасностью, кэшированием и прочими "закидонами" браузеров, которые совсем не закидоны, а просто следование стандарту.
  • Велосипеды со всякими {error: "message","result":...} невозможно нормально тестировать и отлаживать
  • Поддержка большим количеством готовых клиентских библиотек на все случаи жизни. Те, кто будет вашим api пользоваться, скажут большое человеческое спасибо.
  • Поддержка автоматизированного интеграционного тестирования. Когда сервер на любые запросы отдаёт 200 ОК — ну, это такое себе развлечение.
Читать дальше →
Всего голосов 71: ↑55 и ↓16+39
Комментарии207

Web application firewalls

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

Web application firewall


Web application firewalls (WAFs) are a type of intrusion detection and prevention system and might be either a hardware or software solution. It is specifically designed to inspect HTTP(s) and analyse the GET and POST requests using the appalling detection logic explained below. Web application firewall software is generally available as a web server plugin.

WAF has become extremely popular and various companies offer a variety of solutions in different price categories, from small businesses to large corporations. Modern WAF is popular because it has a wide range of covered tasks, so web application developers can rely on it for various security issues, but with the assumption that this solution cannot guarantee absolute protection. A basic WAF workflow is shown below.



Its main function is the detection and blocking of queries in which, according to WAF analysis, there are some anomalies, or an attacking vector is traced. Such an analysis should not make it difficult for legitimate users to interact with a web application, but, at the same time, it must accurately and timely detect any attempted attack. In order to implement this functionality, WAF developers usually use regular expressions, tokens, behavioural analysis, reputation analysis and machine learning, and, often, all these technologies are used together.



In addition, WAF can also provide other functionality: protection from DDoS, blocking of IP-addresses of attackers, tracking of suspicious IP-addresses, adding an HTTP-only flag to the cookie, or adding the functionality of CSRF-tokens. Each WAF is individual and has a unique internal arrangement, but there are some typical methods used for analysis.
Read more →
Всего голосов 15: ↑13 и ↓2+11
Комментарии0

Editor.js прекрасный редактор сохраняющий исходный код в JSON формате

Время на прочтение1 мин
Количество просмотров26K
CodeX крутые ребята, которые базируются в Университете ИТМО. На базе этого университета студенты и выпускники создают интересные и полезные проекты: Hawk.so, Capella, AR-tester и другие.

Один проект очень помог нашему бизнесу. Редактор Editor.js сохраняющий исходный код в JSON.


Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии29

Подробности о GraphQL: что, как и почему

Время на прочтение19 мин
Количество просмотров105K
GraphQL сейчас, без преувеличения, это — последний писк IT-моды. И если вы пока не знаете о том, что это за технология, о том, как ей пользоваться, и о том, почему она может вам пригодиться, значит статья, перевод которой мы сегодня публикуем, написана специально для вас. Здесь мы разберём основы GraphQL на примере реализации схемы данных для API компании, которая занимается попкорном. В частности, поговорим о типах данных, запросах и мутациях.


Читать дальше →
Всего голосов 27: ↑23 и ↓4+19
Комментарии23

IDE нормального человека или почему мы выбрали Monaco

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

Памятка от редактора


В прошлой статье мы рассказали про релиз панели управления Voximplant, не забыв упомянуть обновленную IDE. Сегодня мы посвящаем этому инструменту отдельный лонгрид – наша коллега Geloosa заботливо описала как процесс выбора технологии, так и имплементацию с вкладками, автокомплитом и кастомными стилями. Садитесь удобнее, отложите остальные дела и заходите в подкат, где любопытных ждут кишки Monaco – не поскользнитесь, их там много :) Приятного чтения.

Читать дальше →
Всего голосов 44: ↑41 и ↓3+38
Комментарии13

Чем функциональные компоненты React отличаются от компонентов, основанных на классах?

Время на прочтение13 мин
Количество просмотров107K
Чем функциональные компоненты React отличаются от компонентов, основанных на классах? Уже довольно давно традиционный ответ на этот вопрос звучит так: «Применение классов позволяет пользоваться большим количеством возможностей компонентов, например — состоянием». Теперь, с появлением хуков, этот ответ больше не отражает истинное положение дел.

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



Я, в любом случае, не рекомендую переписывать существующие компоненты с применением новых технологий если на то нет веских причин, и если вы не против оказаться в числе тех, кто раньше всех начал этими технологиями пользоваться. Хуки — это всё ещё новая технология (такая же, какой была библиотека React в 2014 году), и в руководства по React ещё не попали некоторые «передовые методики» их применения.
Читать дальше →
Всего голосов 37: ↑35 и ↓2+33
Комментарии3

Стажёр Вася и его истории об идемпотентности API

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

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


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →
Всего голосов 219: ↑216 и ↓3+213
Комментарии163

Практичный Go: советы по написанию поддерживаемых программ в реальном мире

Время на прочтение48 мин
Количество просмотров57K
Статья посвящена лучшим практикам написания кода Go. Она составлен в стиле презентации, но без обычных слайдов. Постараемся кратко и чётко пройтись по каждому пункту.

Для начала следует договориться, что значит лучшие практики для языка программирования. Здесь можно вспомнить слова Расса Кокса, технического руководителя Go:

Программная инженерия — то, что происходит с программированием, если добавить фактор времени и других программистов.

Таким образом, Расс различает понятия программирования и программной инженерии. В первом случае вы пишете программу для себя, во втором создаёте продукт, над которым со временем будут работать и другие программисты. Инженеры приходят и уходят. Команды растут или сокращаются. Добавляются новые функции и исправляются ошибки. Такова природа разработки программного обеспечения.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+55
Комментарии14

Как детская головоломка помогает раскрыть секреты магнетизма

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

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



Игра в 15 предлагает игроку сдвигать пронумерованные плитки в рамках решётки. Если заменить номера спинами электронов, головоломку можно будет использовать для объяснения того, как работают постоянные магниты.

На несколько месяцев в 1880-м году целые регионы США поддались пристрастию, аналогов которого ранее никто не видел. «По всей стране буквально разразилась эпидемия», — писал журнал The Weekly News-Democrat города Импория, штата Канзас, 12 марта 1880. «Целые города завлечены, люди теряют сон и сходят с ума». Эпидемия распространилась на Европу, и дошла даже до Австралии с Новой Зеландией.

Заболеванием стала новая страсть: обескураживающее простая механическая игрушка-головоломка «15». Она известна до сих пор, и состоит из поля 4х4 квадрата, в котором можно передвигать 15 пронумерованных плиток с целью расставить их по порядку.
Читать дальше →
Всего голосов 25: ↑20 и ↓5+15
Комментарии2

Информация

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