Pull to refresh
34
0
Махмуд @Maxmyd

User

Send message

Пример организации кода для сложного Angular проекта

Reading time3 min
Views13K

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



(Изображение взято из статьи "12 Things to Help Large Organizations Do Angular Right" )


Данная публикация есть практическое осмысление статей "12 Things to Help Large Organizations Do Angular Right" (Victor Savkin, Co-founder of Narwhal Technologies (nrwl.io) и "Angular: Understanding Modules and Services" (Michele Stieven, Web Developer & JS enthusiast) через призму собственного опыта работы с фреймворком.

Читать дальше →

Масштабирование Selenium

Reading time19 min
Views16K

Представьте, что у вас есть всего один тест с использованием Selenium. Что может сделать его нестабильным? Как его ускорить? Теперь представьте, что тестов стало два. Теперь представьте сотню. Как заставить быстро отработать такую кучу тестов? Что произойдет, если количество тестов продолжит расти?


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



Прототипом этой статьи является доклад Саймона Стюарта на Heisenbug 2017 Moscow. Саймон — создатель WebDriver, технологии, которой сейчас почти 11 лет. Он стал руководителем проекта Selenium около 9 лет назад. В Google занимался масштабированием Selenium, от нескольких десятков тысяч до нескольких миллионов тестов каждый день, на их инфраструктуре. Затем перешел в Facebook. В данный момент занимается разработкой спецификации WebDriver для W3C, которая входит в группу тестирования и тулинга в W3C. Можно сказать, что на основе WebDriver и создается стандарт.

Читать дальше →

Что ещё мы проверяем при помощи Selenium, кроме логики интерфейса

Reading time10 min
Views34K
Привет, Хабр!

Меня зовут Виталий Котов, я работаю в отделе тестирования Badoo. Большую часть времени я работаю с Selenium. Этот замечательный инструмент мы используем для решения разнообразных задач: от тестирования функционала до упрощения работы с логами ошибок и проверки взаимодействия с API.

О том, какие задачи нам помогает решать Selenium, и пойдёт речь в этой статье. Поехали! :)


Читать дальше →

ASP.NET Core: Механизмы предотвращения атак 2.0

Reading time20 min
Views25K

По встроенным механизмам безопасности ASP .NET Core написано мало статей. Даже официальная документация имеет пробелы. В этой статье мы пройдём по всем основным компонентам, имеющим отношение к безопасности, и разберём, как это работает внутри.


Если вы используете старый добрый ASP .NET, то для вас будет полезна информация по внутреннему устройству компонентов безопасности и лучшим практикам их использования. Здесь вы найдёте ответы на следующие вопросы: как реализованы современные анти-XSS механизмы и как их правильно использовать в ASP .NET Core? Как правильно работать с cookies и какие подводные камни там могут встретиться? Как был переписан механизм защиты от CSRF? Как правильно работать с криптографическими алгоритмами? Кроме того, рассказывается про опыт участия в Bug Bounty по поиску уязвимостей в ASP .NET Core.


Перед чтением рекомендуется освежить в памяти атаки из списка OWASP Top 10.


Прототипом статьи является доклад Михаила Щербакова на конференции DotNext 2017 Moscow. Михаил — Microsoft .NET MVP, участник .NET Core Bug Bounty Program, соорганизатор сообщества .NET программистов (Московское комьюнити называется MskDotNet, питерское — SpbDotNet). По работе последние 5 лет занимается безопасностью. Работал в Positive Technologies, в Cezurity, сейчас как консультант работает напрямую с заказчиками, по большей части в этой же сфере. Профессиональные интересы: статический и динамический анализ кода, информационная безопасность, автоматизация отладки кода, исследование внутреннего устройства .NET CLR.


В этом тексте огромное количество картинок со слайдов. Осторожно, трафик!

Читать дальше →

Вопросы для собеседования бэкенд-разработчика

Reading time16 min
Views201K
Этот список появился как личная памятка по темам, которые я обсуждал с коллегами и друзьями и в которых хотел разобраться поглубже…

Я не большой любитель задавать технические вопросы на собеседованиях: по мне так лучше посидеть с кандидатом (или кандидаткой) за клавиатурой над каким-то реальным кодом, реальной проблемой — и целый день заниматься парным программированием, желательно поочерёдно с остальными членами команды. Но я считаю, что некоторые технические вопросы могут быть хорошей отправной точкой для начала увлекательного и приятного разговора и позволят глубже узнать друг друга.

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

Переход с AngularJS на Angular: цели, планы и правила переноса элементов (1/3)

Reading time13 min
Views14K


В январе мы в Skyeng закончили перевод нашей платформы Vimbox с AngularJS на Angular 4. За время подготовки и перехода у нас накопилось много записей, посвященных планированию, решению возникающих проблем и новым конвенциям работы, и мы решили поделиться ими в трех статьях на Хабре. Надеемся, что наши заметки окажутся полезными структурно похожим на наш Vimbox проектам, которые только начали переезжать или собираются сделать это.

Читать дальше →

Избавляемся от boilerplate для валидации в ASP.NET MVC

Reading time2 min
Views11K
В большинстве примеров проверка входных данных ASP.NET MVC осуществляется следующим образом:

        [HttpPost]
        public IActionResult Test(SomeParam param)
        {
            if (!ModelState.IsValid)
            {
                return View(param);
                // return Json({success: false, state: ModelState});
            }
            
            dbContext.UpdateData(param);

            return RedirectToAction("index");
            // return Ok({success: true});
        }

Этот код можно улучшить:

  1. вынести валидацию из тела метода и избавиться от дублирования if (!ModelState.IsValid)
  2. вернуть код ответа 422
Читать дальше →

10 лучших бесплатных CRM систем для бизнеса

Reading time9 min
Views256K

Для помощи малому бизнесу мы впервые сделали подборку бесплатных СRM систем. Мы ранжировали список таких систем в соответствии с наивысшими оценками, используя отзывы реальных пользователей (по состоянию на 13 октября 2017)

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

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

Малому бизнесу и стартапам необходимо место для удобного хранения данных о клиентах, инструменты для прогнозирования и проведения маркетинговых активностей.

К счастью, основываясь на отзывах реальных пользователей G2 Crowd, мы составили список из 10 лучших (на основе оценок пользователей по удобству использования) бесплатных CRM-инструментов! Часть CRM компаний в этом списке предлагают бесплатно использовать свое ПО только в течение пробного периода, другие — абсолютно бесплатны.
Читать дальше →

Как найти лучшие авиабилеты в интерфейсе гугл-таблицы

Reading time3 min
Views16K

Начало


Я часто езжу в поездки и покупаю авиабилеты.
И так же часто страдаю от интерфейса агрегаторов авиабилетов.
Я не могу выбрать билет и совершить покупку.


Кейс


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


В этот раз я захотел слетать в Серфаус — это горнолыжная деревня в Австрии.
Улететь не ранее 5 января, вернуться на позднее 15 января. На 6-8 дней.


Теперь нужно найти лучший билет под эти условия.
"Лучший" в моем случае — это комбинации объективной цены и субъективного удобства перелета — время вылета/прилета, аэропорт вылета, авиакомпания и так далее.


Как кейс решается у агрегатора авиабилетов


  1. Трансформирую деревню Серфаус в три ближайших аэропорта — Мюнхен, Инсбрук и Цюрих с помощью гугл-карт.
  2. Иду в агрегатор авиабилетов. Нахожу инструмент типа "Календарь низких цен".
  3. Открываю его в трех вкладках для трех аэропортов.
  4. Выбираю январь.
  5. Начинаю тыкать в каждый день января, чтобы увидеть время вылета/прилета и цену билета.
  6. Если мне понравился какой-то билет, тыкаю в него, чтобы убедиться, что билет реально есть. Потому что кеш.
  7. Чтобы запомнить, в какой день какой билет мне понравился, я записываю его в блокнот или таблицу.

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


Но, в итоге, я не нахожу нужный билет за психологически комфортное время.
И, не совершив покупку, ухожу.


Как кейс должен решаться


  1. Указываю "Серфаус" в поле "Куда" в агрегаторе.
  2. Выбираю примерные даты.
  3. Выбираю подходящую продолжительность.
  4. Получаю список билетов для покупки.
  5. Выбираю подходящий билет и покупаю.

… такого сценария работы нет у агрегаторов.

Читать дальше →

Постъядерный караван в 35 килобайт

Reading time12 min
Views21K
35 килобайт минифицированного кода на обычном JavaScript, семь городов, пустоши, радиоактивные гекконы, съедобные кактусы, встречные караваны и бандиты. Что это? Это небольшая игра, которая запускается в браузере. Ее принципы довольно просты для повторения и в самой примитивной версии ее можно воссоздать, наверное, на любом устройстве, если там есть устройство вывода и генератор случайных чисел. Но сегодня я хочу рассказать, как я реализовал ее для современных браузеров.

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

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

Читать дальше →

EntityFramework: (анти)паттерн Repository

Reading time15 min
Views118K
Repository Pattern
Репозиторий является посредником между слоем доступа к данным и доменным слоем,
работая как in-memory коллекция доменных обектов. Клиенты создают декларативные
описания запросов и передают их в репозиторий для выполнения.
  — свободный перевод Мартина Фаулера

EntityFraemwork предоставляет нам готовую реализацию паттернов Repository: DbSet<T> и UnitOfWork: DbContext. Но мне часто приходится видеть, как коллеги используют в своих проектах собственную реализацию репозиториев поверх существующих в EntityFraemwork.


Чаще всего используется один из двух подходов:


  1. Generic Repository как попытка абстрагироваться от конкретного ORM.
  2. Repository как набор запросов к выбранной таблице БД (паттерн DAO).

И каждый из этих подходов содержит недостатки.

Читать дальше →

Тестируем Web UI на F# и canopy

Reading time3 min
Views6.1K
Доброго времени суток! С недавнего времени я начал увлекаться функциональным программированием, поэтому в этой статье я бы хотел поделиться с вами моими находками. Мне очень симпатизирует минимализм синтаксиса функциональных языков. Сила и красота, которую несут за собой несколько строк кода.

В процессе UI тестирования своего рабочего проекта на C# и selenium, я задумался о том, как будут выглядеть тест сценарии на одном из функциональных языков. Мой выбор пал на F#. Поискав, я наткнулся на очень интересный фреймворк под названием canopy, который базируется на всем известном selenium и полностью реализованном на языке F#. С первых же строк кода он произвел на меня впечатление своей простотой и минимализмом синтаксиса, который позволяет упрощать сложные вещи.
Читать дальше →

Каких ответов я жду на собеседовании по тестированию

Reading time15 min
Views920K
Я провожу собеседования на тестировщиков. У меня иногда болит голова.

Долго собирался написать статью… И вот, наконец, выполнил свое намерение. Вопросы, поднимаемые в статье, обсуждались уже не раз и не два, но усердные поиски компиляции ответов на эти вопросы так и не увенчались успехом. Но, как подсказывает мой опыт, такая компиляция очень нужна. Прежде всего она требуется юниорам, ибо в сети по запросу «тестирование» на них (соискателей) обрушивается огромный объем информационного мусора, который плохо структурирован и часто противоречит сам себе.
Читать дальше →

Уменьшаем количество ошибок с помощью чек-листа Code Review

Reading time3 min
Views31K
В нашей статье об эффективных ревью кода мы рекомендовали использовать чеклист. Чеклисты (контрольные списки) — это великая вещь в ревью: они гарантируют, что ревью действительно прошло через вашу команду. Также они способствуют выявлению и решению общих трудностей.

Исследование, проведенное Software Engineering Institute, показывает, что программисты делают 15-20 распространенных ошибок. Добавив такие ошибки в чеклист, вы можете быть уверены, что заметите их в момент появления и поможете от них избавиться надолго.

Чтобы вам было от чего отталкиваться, вот вам список типичных пунктов:
Читать дальше →

Современный очень тихий компьютер

Reading time2 min
Views8.2K
Мне надоел шум из под стола от системного блока. Реально иногда не хочется сидеть за компьютером только по причине того, что лишние децибелы терроризируют сознание. Ноутбук решил бы данную проблему, особенно на базе тихих энергосберегающих решений типа современного Pentium, но я предпочитаю мощный системник.

image

У меня сейчас не топовая, довольно старая конфигурация, но её производительность мне вполне подходит:
Intel Core 2 Duo E7500 2.93Ггц
8Гб DDR3 SDRAM
2Тб HDD Seagate 5900 Green

Я путём небольших вложений заставил-таки свой компьютер работать бесшумно.

Рассмотрим по отдельности все шумные узлы системного блока, такие как:
  • Видеокарта. Обычно наиболее шумный элемент
  • Процессор. Тоже не очень тихий узел системы
  • Блок питания. Также как правило содержит вентилятор
  • Прочее. Мало ли что там ещё гудит

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

Как правильно покупать товары на Ebay

Reading time5 min
Views183K
image
Тема Ebay в связи с его русификацией становится очень актуальной, поэтому решил поделиться с хабрасообществом несколькими советами из области как правильно покупать товары на Ebay, чтобы не нарватся на мошенников и сделать правильную покупку. Большая часть описанного основана на личном опыте.
Читаем далее

Теперь Google Analytics работает Асинхронно

Reading time3 min
Views5.5K
Новый код выглядит вот так:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview']);

(function() {
 var ga = document.createElement('script');
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
   'http://www') + '.google-analytics.com/ga.js';
 ga.setAttribute('async', 'true');
 document.documentElement.firstChild.appendChild(ga);
})();

Это значит, что гугл.аналитикс больше не замедлит загрузку вашего сайта :)
UPD: То есть, он скачивал свой 24кб ga.js во время загрузки страницы, теперь он это может делать после…
Но после первой загрузки, он обычно закэширован и на всех остальных сайтах используется один и тот же :)

Материалы по теме:
Под катом бонус, код для русских поисковиков

Полезняшка от Leadtek – Winfast VC100 U

Reading time3 min
Views3.1K
Когда я только начинал писать обзоры, я и предположить не мог, что вот-вот и это станет моим хобби, а в последующем и интересной работой. Статейка за статейкой, коробка за коробкой…и вот, настал тот предсказуемый момент, когда стала ощущаться нехватка свободного места, куда можно было бы спрятать какие-нибудь коробки, инструкции, диски с драйверами и прочие невостребованные провода.

image

Немного дефрагментировав обстановку в комнате, я обнаружил одно злачное местечко – тумбочку, битком набитую старыми VHS-кассетами. «Ну погоди», «Сам себе режиссер», «КВН» — ну что тут еще сказать :) Думаю, многие меня поймут – вроде давно не нужно, но и выкидывать как-то жалко… Решение проблемы нашлось довольно быстро.
Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity