Pull to refresh
0
0
Алексей @LoonyJester

User

Send message

Изнанка работы платежных технологий на основе NFC и MST

Reading time6 min
Views32K
imageС учетом популярности и распространенности платежных технологий на основе NFC и имитации магнитного сигнала — MST, мы в команде платежного провайдера Fondy, публикуем пост, в котором описан механизм работы этих решений: от точки А (взаимодействия с платежным терминалом) до точки Б (исполнения транзакции).

По результатам выдачи Яндекса, главным вопросом пользователей на тему NFC остается «Что такое NFC и как научиться им пользоваться?». Это сильно контрастирует с тем же Google, где вопрос уже другой. Что такое NFC, там уже знают — NFC там есть в каждом домохозяйстве. Вопрос — как применить то, что дано? Что можно делать, используя NFC? Что делать обычному непродвинутому пользователю с технологией ближнего поля?

Для начала вот список нескольких смарт-устройств, совместимых с NFC: Nexus 6, Sony Xperia Z3, iPhone 6/7, Samsung Galaxy Note 4, LG G3, HTC One M9. Для любителей изучения и сравнения девайсов, вот полный список.
Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments1

Расширения Entity Framework 6, о которых вы могли и не знать

Reading time10 min
Views26K

Многие программисты делают записи, описывают трудности, красивые и не очень решения, с которыми приходится сталкиваться по долгу службы. Это может быть собственный технический блог, рабочая вики, или даже обычный блокнот — суть одна. Постепенно, из маленьких Evernote-заметок может вырасти целая статья на Хабр. Но время идет, перемена места работы сулит изменения в стеке разработки, да и технологии не стоят на месте (кстати, EF Core уже пару месяцев как в версии 1.1). С другой стороны, Entity Framework 6 был и остается "рабочей лошадкой" для доступа к данным в корпоративных приложениях на стеке .net, не в последнюю очередь благодаря своей стабильности, низкому порогу входа и широкой известности. Поэтому, я надеюсь, статья всё еще окажется кому-то полезной.


Содержание:


  1. Database First без EDMX
  2. Работа с отсоединенными графами
  3. Модификация SQL. Добавление табличных указаний
  4. Кэширование данных за пределами времени жизни DbContext
  5. Retry при ошибках от SQL Server
  6. Подменяем DbContext, изолируемся от реальной БД
  7. Быстрая вставка
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments4

Некоторые тонкости использования Service Workers

Reading time7 min
Views27K


Предисловие


Сервис-воркеры (Service Workers, да простят меня читатели) сегодня являются полезным дополнением к основной функциональности сайта: тут и работа в оффлайне, и фоновая синхронизация данных, и модные пуш-уведомления.

Однако большое количество статей про сервис-воркеры выглядят достаточно сжато и описывают простые примеры. Я попробую обратить внимание на некоторые особенности работы сервис-воркеров, так что требуются какие-то базовые знания. Отправной точкой может быть эта статья (перевод) или чуть более подробная статья.
Читать дальше →
Total votes 36: ↑30 and ↓6+24
Comments7

Каково оно учить JavaScript в 2016

Reading time10 min
Views349K


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

— Это теперь называется Front-End инженер, но да, я — именно он. Я работаю с вебом в 2016. Визуализации, музыкальные плееры, летающие дроны, которые играют в футбол, все что угодно. Я только что вернулся из JsConf и ReactConf, так что я знаю новейшие технологии для создания веб-приложений.

— Круто. Мне нужно создать страницу, которая отображает последние действия со стороны пользователей, так что мне просто нужно получить данные от REST и отобразить их в какой-то фильтруемой таблице, ну и обновлять её, если что-то изменится на сервере. Я думал, может быть, использовать JQuery для извлечения и отображения данных?

— О, Мой Бог! Нет! Никто больше не использует JQuery. Ты должен попробовать React: это — 2016!
Читать дальше →
Total votes 260: ↑238 and ↓22+216
Comments298

Запуск SpaceX CRS-8 с посадкой ступени Falcon 9 на плавучий космопорт — в пятницу в 23:43 по московскому времени

Reading time4 min
Views12K

CRS-8, мыс Канаверал, SpaceX.

8 апреля частная космическая компания SpaceX совершит запуск корабля CRS-8 с целью планового снабжения Международной космической станции. Капсула Dragon принесёт на станцию припасы, оборудование и надувной модуль BEAM. Пятничный запуск интересен возобновлением миссий SpaceX на МКС и ещё одной попыткой посадить первую ступень ракеты на баржу в открытом море.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments36

Логирование .Net MVC 3 за 30 минут

Reading time4 min
Views6.1K
Наличие системы логирования – уже давно узаконенное явление. Она позволяет, как защитить Вас от необоснованных обвинений в Вашу сторону, так и иметь возможность восстановить утерянные данные.

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

Вводная


Представьте, что Вы разрабатываете приложение, у которого нет технического задания. Требования и функционал постоянно меняются. И далеко не всегда зафиксированы определения «что есть что». Т.е. у Вас в любую минуту может поменяться все. Проект подразумевает связку MSSQL + ASP.Net MVC3 + скрипты на UI (куда же без них). Связка с БД организована через Linq. Так же важное условие, что коннект от web- приложения к БД идет от одного пользователя.
И ко всему времени на написание очень мало.

Какие варианты решения?

  • 1. Логирование на уровне БД. Есть разные способы. Как один из них – это универсальные триггеры (в интернете есть информация по уже готовым способам). Но тут возникает 2 проблемы:
    1. Что будет, если Вы начнете добавлять свои триггеры.
    2. Придется каждый раз передавать имя пользователя.

    Итог – много кода и время.
  • 2. Логирование на уровне web- приложения. В данном случае у Вас есть все что нужно. И запросы, и пользователь, и данные.
  • 3. Можно использовать и логирование IIS, но тогда Ваш лог находится в скупе с множеством других приложений. Ну и самое важное – Вы ограничены их функционал, и в будущем не сможете поменять логирование так как Вам надо.

Я выбрал путь решения – путь логирования на уровне web-приложения.
Итак, что нам понадобиться.

1. Создать таблицу в MSSQL
2. Написать классы для логирования и простейшего репозитория
3. Внедрить обработчик в Global.asax.cs
Читать дальше →
Total votes 5: ↑3 and ↓2+1
Comments19

Поняв Docker

Reading time14 min
Views222K

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


К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


Что мы имеем сегодня


  • Зоопарк дубовых VPS-хостингов.
  • Дорогие IaaS и PaaS с гарантированным vendor lock in.
  • Уникальные сервера-снежинки.
  • Ворох устаревших зависимостей на неподдерживаемой операционке.
  • Скрытые связи частей приложения.
  • Незаменимый админ полубог на скейтборде.
  • Радуга окружений: development, testing, integration, staging, production.
  • Генерация конфигов для системы управления конфигами.
  • Feature flagging.
docker run docker
Total votes 92: ↑83 and ↓9+74
Comments245

Делаем TDD привычкой: проблемы и внедрение

Reading time5 min
Views21K
imageОт переводчика. На Хабре довольно много статей, посвященных TDD. Но к сожалению в них нет подробной информации о том как внедрять TDD комплексно, на уровне компании. Как мне показалось, данная статья дает на это ответ и если вы поставили перед собой такую цель, то эта статья может вам пригодиться.

Я столкнулся с командами в нашей организации, которые пытаются внедрить Test Driven Development (TDD).Иногда одному или двум разработчикам удается применить его без посторонней помощи, но у большинства этого не выходит. Чтобы лучше понять проблему я провел опрос среди членов команды и обнаружили, что даже после обучения еще многое предстоит сделать. Эта стратегия была разработана, чтобы помочь любому внедрить TDD в организации, хотя некоторые из идей применимы лишь для средних и крупных компаний.
Читать дальше →
Total votes 35: ↑26 and ↓9+17
Comments28

Проблема дублирования и устаревания знания в mock-объектах или Интеграционные тесты — это хорошо

Reading time9 min
Views17K
Многие программисты при выборе между интеграционным и юнит-тестом отдают предпочтение юнит-тесту (или, иными словами, модульному тесту). Некоторые считают интеграционные тесты антипаттерном, некоторые просто следуют модным тенденциям. Но давайте посмотрим, к чему это приводит. Для реализации юнит-теста mock-объекты навешиваются не только на внешние сервисы и хранилища данных, но и на классы, реализованные непосредственно внутри программы. При этом, если мокируемый класс используется в нескольких других классах, то и mock-объект будет содержаться в тестах на несколько классов. А поскольку тестируемое поведение принято задавать внутри теста (смотри given-when-then, arrange-act-assert, test builder), то поведение моки каждый раз заново задаётся в каждом тесте, и нарушается принцип DRY (хотя дублирования кода может и не быть). Кроме того, поведение класса декларируется в mock-объекте, но сама эта декларация не проверяется, поэтому со временем задекларированное в моке поведение может устареть и начать отличаться от реального поведения мокируемого класса. Это вызывает целый ряд сложностей:

1)Во-первых, при изменении функционала сложно вообще вспомнить, что помимо класса и тестов на него нужно изменить ещё и моки этого класса. Давайте рассмотрим цикл разработки в рамках TDD: «создание\изменение тестов на функционал -> создание\изменение функционала -> рефакторинг». Mock-объекты являются декларированием поведения класса и не имеют отношения ни к одной из этих трёх категорий (не являются тестами на функционал, несмотря на то, что в тестах используются, и уж тем более не являются самим функционалом). Таким образом, изменение mock-объектов классов, реализованных внутри программы, не укладывается в концепцию TDD.

2)Во-вторых, сложно найти все места мокирования этого класса. Я не встречал ни одного инструмента для этого. Тут можно или написать свой велосипед, или смотреть все места использования этого класса и отбирать те, где создаются моки. Но при неавтоматизированном поиске можно и ошибиться, проглядеть что-нибудь. Тут у вас, наверное возник вопрос: если проблема столь фундаментальна, как описывает автор, неужели никому не пришло в голову реализовать инструменты, упрощающие её решение? У меня есть гипотеза на этот счёт. Несколько лет назад я начал писать библиотеку, которая должна была собирать mock-объект так же, как IOC-контейнер собирает обычный класс, и автоматически создавать и прогонять тесты на поведение, описываемое в моках. Но затем я отказался от этой идеи, потому что нашёл более элегантное решение проблемы моков: просто не создавать эту проблему. Вероятно, по схожей причине специализированный инструмент для поиска моков конкретного класса или не реализован, или малоизвестен.

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

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


Читать дальше →
Total votes 21: ↑16 and ↓5+11
Comments99

Околоархитектурные рассуждения или результаты одного спора

Reading time5 min
Views13K
В один прекрасный обыкновенный четверг в одной команде разработчиков появились разногласия по поводу некоторых архитектурных решений, реализация которых была утверждена приказом сверху, а не родилась в ходе аргументированного спора. По прошествии некоторого времени подобный спор возник опять, уже на новом проекте. Дискуссия становилась все жарче, и для прояснения ситуации и достижения просветления даже были привлечены сторонние высшие силы. Последнее достигнуто не было, и все же, тем же волевым решение, был принят один из вариантов развития бытия. Но мудрый Каа один из участников обсуждения решил не оставлять в команде неразрешенных споров — почвы для возникновения конфликтов в будущем, раскола команды и другого мордобития, и предложил все решить всеобщей пьянкой составлением данного документа, который поможет членам команды достичь просветления и снова стать мягкими и пушистыми.
В данном документе мне было предложено описать преимущества и недостатки двух подходов, достичь консенсуса и воцарить мир и справедливость во Вселенной.
Ниже я и попытаюсь в меру своих интеллектуальных возможностей это сделать (поэтому буду использовать очень простые слова и выражения) и вынести на суд кровавых мясников почтенной публики.
Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments24

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity