Search
Write a publication
Pull to refresh
0
0
Светлов Александр @Mehalich

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

Send message

Микросервисные паттерны проектирования

Reading time6 min
Views99K
Здравствуйте, Хабр!

В ближайшее время читайте пост о русском переводе долгожданной книги "Создание Микросервисов" Сэма Ньюмена, которая уже отправилась в магазины. Пока же мы предлагаем почитать перевод статьи Аруна Гупты, автор которой описывает самые интересные паттерны проектирования, применимые в микросервисной архитектуре
Читать дальше →

Entity Framework в WinForms. Часть 1

Reading time9 min
Views34K

Вступление


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


На сегодняшний день Winforms все еще остается платформой для многих бизнес-приложений, ориентированных на работу с данными, и привязка данных является неотъемлемой частью разработки для Winforms. Если вы использовали стандартные классы ADO.NET для работы с данными, то вы знакомы с инструментами, используемыми для создания классов DataSet и связывания этих классов во время разработки с помощью их свойств DataSource, DataMember или Binding.

Плохая новость заключается в том, что эти богатые возможности разработки не применимы к источникам данных Entity Framework. Даже простая привязка требует написания кода. Чтобы получить работающую базовую привязку, достаточно немного кода, но для получения полноценной привязки, к которой мы привыкли (такой как автоматическая сортировка, фильтрация, и иерархическое связывание), требуется существенный объем работы.

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

  • EntityDataSource: компонент, который инкапсулирует модель сущности данных и представляет его элементы в качестве источников данных, пригодных для связывания, с полной поддержки во время разработки.
  • EntityBindingNavigator: элемент управления, который обеспечивает навигацию для просмотра и предоставляет пользовательский интерфейса для добавления и удаления записей, сохранение или отмены изменений в базе данных.

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

PCB Factory. Гаражная разработка и производство электроники. Ч2

Reading time4 min
Views20K
Настоящие проекты рождаются в гараже!

В первой части подробно, со всеми деталями, в картинках был описан процесс проектирования платы в CAD EAGLE. На гаражной фабрике работал «проектный отдел». Теперь документацию передаём «производственникам»
3D фрезер готов! Смотрим комикс про работу «производственного отдела»)



Для создания g-code в главном окне Eagle при открытом файле brd нажимаем правой кнопкой на pcb-gcode-setup.ulp и выбираем Run in Board
Читать дальше →

Проблема дублирования и устаревания знания в 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)В-третьих, мест мокирования класса может быть много, и изменение их всех — рутинное занятие. Если программист вынужден делать рутину, которую невозможно автоматизировать, то это явный признак того, что с инструментами, архитектурой или рабочими процессами что-то не в порядке.

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


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

Первая игра для iOS и первые трудности. Как не опустить руки и довести дело до релиза

Reading time5 min
Views15K

С автомобилем по жизни


Еще с юношеских лет автомобили – моя страсть. Я мог часами напролет читать автожурналы, рассматривать фото с последних автосалонов и автовыставок. Я буквально провожал взглядом каждый новый автомобиль проезжающий мимо меня по улице. Именно моя любовь к машинам и стала основополагающей при выборе моей первой профессии. Еще в студенческие годы я устроился журналистом в молодой автомобильный журнала. Уже через год я работал редактором отдела одного из лучших европейских журналов об автомобилях. Этот был бесценный опыт. Я узнал как создаются продукты, в частности еженедельные печатные издания. Во время работы в автопрессе я понял, что команда должна работать как единое целое. Каждый участник проекта – это незаменимая шестеренка в слаженном большом механизме. Только так, и никак иначе, на выходе получится качественный продукт.

От продакшена к продукту


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

Поиск идеи не был длительным и отчасти стал стечением обстоятельств. Мы как раз закончили один небольшой некоммерческий проект – иконку для iOS приложения.

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

Измерение веса руды по току статора. Практика. Часть 1. Алгоритм обработки сигналов в МК

Reading time9 min
Views8.7K
В прошлой статье мы рассмотрели теоретически основы измерения веса руды в сосуде ШПУ по измерению силы, развиваемым двигателем при подъеме. Схемотехнически подготовили сигналы тока и напряжения статора двигателя для обработки их в МК. В этой статье мы рассмотрим программную реализацию вычисления массы поднимаемого груза на МК. Для того что бы приступить к написанию программы для МК, необходимо разобраться, как правильно нужно данные сигналы в МК обрабатывать. Итак приступим.

Сигналы тока и напряжения представляют собой синусоидальный сигнал, в основе своей содержащий основную частоту питающей сети (для наших реалий 50 Гц). Про гармоники и прочие составляющие в сетевом напряжении говорить не будем, они есть и оказывают влияние на качество сети и динамические свойства электродвигателей. На любом производстве с ними борются по мере сил, так что их влияние, пусть и не ничтожно, но все-таки мало. Останавливаться на этом не станем.
Читать дальше →

Система плагинов и модулей в Unreal Engine 4

Reading time5 min
Views43K


Здравствуйте, меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Сегодня я расскажу, как создать свой модуль, а потом, как создать плагин в Unreal Engine 4.
Читать дальше →

Создание своего типа ассета в Unreal Engine 4 и кастомизация панели свойств

Reading time4 min
Views23K


Здравствуйте меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Сегодня я хотел бы рассказать как в Unreal Engine создать свой тип ассета и как добавить дополнительный элемент на панель свойств ассета. Итак начнем.
Читать дальше →

PCB Factory. Гаражная разработка и производство электроники

Reading time2 min
Views30K
Настоящие проекты рождаются в гараже!

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



Что должно быть в домашней фабрике печатных плат:
Читать дальше →

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

Reading time9 min
Views51K
Процедурно-генерируемый контент «правильных» игр — Diablo, Rogue, Spelunky, Daggerfall, Elite, Spore и даже аналогов Football Manager — не перестает удивлять. Он позволяет иначе взглянуть на дизайн и подчеркивает элегантность основных показателей системы. С его помощью вы экономите время и можете зарабатывать. Именно благодаря ему Skyrim и Minecraft привлекают огромное количество игроков, которые не изменяют своему выбору даже через несколько лет после выхода этих продуктов. Процедурная генерация – надежное основание, на котором построена концепция столь ожидаемой "No Man’s Sky" от Hello Games.

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

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

1.Crusader Kings II: Сложные родственные связи становятся динамичными благодаря генерируемым персонажам


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

Горький опыт создания игровой компании

Reading time3 min
Views51K


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


Эта история о страстной мечте с печальным концом.

Летом 2012 я решил отдаться моей самой главной страсти – созданию компьютерных игр. У меня были средства, и я думал, что у меня есть всё необходимое для того, чтобы создать кампанию, занимающуюся разработкой игр.

Мы решили назвать её “Supersonic Parachute”.

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

Там, где живет Единорог Пикси. Indie-повествование

Reading time8 min
Views9.6K
Всегда с любопытством читаю очередную историю от инди-разработчиков. О том, как зарождалась идея, какой путь был пройден и что в итоге получилось. Хочу поделиться своей историей создания очень простой, но динамичной игры. Так как будет освещена и техническая часть, это может быть интересно для людей которые хотят сделать свою игру, но не определились с платформой.


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

Простой пул объектов в Unity3D

Reading time7 min
Views50K
В процессе разработки я столкнулся с необходимостью создания пула объектов. Прочитав эту и другие статьи, решил написать для своих нужд пул попроще с доступом к объекту по строке (названию префаба).

Итак, начнем. Пул состоит из четырех скриптов. Состояние вкл/выкл на объекте в пуле определяется его свойством Unity activeInHierarchy, чтобы не городить дополнительных переменных.
Читать дальше →

21 бесплатный учебный ресурс для разработчиков игр

Reading time8 min
Views136K
В интернете полным-полно создателей контента, и каждый хочет привлечь к себе внимание. Но, как ни странно, хороший учебный ресурс найти нелегко, а бесплатный – еще сложнее. Мы публикуем перевод материала, в котором автор собрал ссылки на самые авторитетные и полезные обучающие площадки.


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

Альтернативный Sound Manager для мелких и средних проектов на Unity3D

Reading time10 min
Views10K
imageНа написание данной статьи меня мотивировала другая статья о пригодном для использования в маленьких проектах менеджере звуков. В данном посте я опишу некоторые недостатки, которые автор не перечислил, и предложу свой вариант реализации, на мой взгляд, исправляющий их.

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

Рекурентная нейронная сеть в 10 строчек кода оценила отзывы зрителей нового эпизода “Звездных войн”

Reading time11 min
Views160K
Hello, Habr! Недавно мы получили от “Известий” заказ на проведение исследования общественного мнения по поводу фильма «Звёздные войны: Пробуждение Силы», премьера которого состоялась 17 декабря. Для этого мы решили провести анализ тональности российского сегмента Twitter по нескольким релевантным хэштегам. Результата от нас ждали всего через 3 дня (и это в самом конце года!), поэтому нам нужен был очень быстрый способ. В интернете мы нашли несколько подобных онлайн-сервисов (среди которых sentiment140 и tweet_viz), но оказалось, что они не работают с русским языком и по каким-то причинам анализируют только маленький процент твитов. Нам помог бы сервис AlchemyAPI, но ограничение в 1000 запросов в сутки нас также не устраивало. Тогда мы решили сделать свой анализатор тональности с блэк-джеком и всем остальным, создав простенькую рекурентную нейронную сеть с памятью. Результаты нашего исследования были использованы в статье “Известий”, опубликованной 3 января.



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

Mercurial: изменяем историю

Reading time7 min
Views54K
Когда я познакомился с Mercurial, то все свои знания я почерпнул из статей Спольского (перевод на Хабре), которые подробно описывают основные принципы работы Mercurial и ежедневную работу с ним. Долгое время я использовал Mercurial в пределах, которые не превышали объема этих статей. Наверно, для одиночного разработчика этого почти достаточно. Почти. Но Mercurial сегодня значительно шире и обладает возможностями допускающими редактирование истории изменений, наличие которых, в общем-то, не очевидно, хотя возможности эти достаточно ценны. А из комментариев к разным статьям по системам управления версиями видно, что многие разработчики об этих возможностях не знают. Ниже я хочу провести обзор ряда возможностей Mercurial связанных с изменением истории.

О чем пойдет речь:

  • фазы
  • hg commit –amend
  • hg strip
  • hg rebase

Поехали

Hg Init: Часть 6. Архитектура репозиториев

Reading time5 min
Views30K
Это шестая, заключительная часть из серии Hg Init: Учебное пособие по Mercurial от Джоэля Спольски (Joel Spolsky). Предыдущие части:



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

Часть 6. Архитектура репозиториев



Наш рецепт становится все лучше:

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

Hg Init: Часть 5. Процесс слияния

Reading time4 min
Views41K
Это пятая часть из серии Hg Init: Учебное пособие по Mercurial от Джоэля Спольски (Joel Spolsky). Предыдущие части:


Иногда при слияниях возникают конфликты. Обычно их легко разрешить. В любом случае их надо разрешить, или у вас будет несколько «голов». А кому это нужно?

Часть 5. Процесс слияния




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

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

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

Hg Init: Часть 4. Исправляем ошибки

Reading time4 min
Views73K
Это четвертая часть из серии Hg Init: Учебное пособие по Mercurial от Джоэля Спольски (Joel Spolsky). Предыдущие части:


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

Часть 4. Исправляем ошибки




Mercurial позволяет свободно экспериментировать. Представьте, что во время работы вы что-то не то сделали в редакторе, и случилось нечто ужасное:

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

Information

Rating
Does not participate
Location
Таллин, Эстония, Эстония
Date of birth
Registered
Activity