Как стать автором
Поиск
Написать публикацию
Обновить
0
Maxim Tkachenko @BenderRRread⁠-⁠only

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

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

Как Минковский во Flappy Bird играл

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


Многие пробовали играть во Flappy Bird. Редко кому удается пролететь за 50 труб, очень немногие долетают до сотни-двух. Некоторые пробовали создать бота, в том числе на хабре. Удивительно, но даже у самого успешного бота, которого можно найти на просторах интернета, результаты не очень-то впечатляют – что-то около 160 очков. Возникает вопрос, а можно ли вообще играть во Flappy Bird бесконечно долго? Или всегда с некоторой, пусть и небольшой, вероятностью может встретиться последовательность препятствий, которую даже опытный игрок/идеальный бот не сможет преодолеть?

И тут на помощь приходит математика. Давайте найдем выигрышную стратегию для Flappy Bird.
Читать дальше →

.NET Portability Analyzer

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

.NET Portability Analyzer это совсем не новое приложение, которое, по причине появления .NET Standard должно бы стать интересным для разработчиков. Портируемость кода ускоряет работу команд в разы. Если вам интересно узнать насколько переносим на другую платформу ваш код, то вы можете использовать .NET Portability Analyzer, который доступен в виде расширения для Visual Studio и в виде отдельного консольного приложения.

.NET Portability Analyzer актуален для разработчиков .NET, .NET Core, UWP, Xamarin и Mono.
Далее предлагаю вашему вниманию факты и описание процесса использования.
Читать дальше →

Безопасность в IoT: Стратегия всесторонней защиты

Время на прочтение6 мин
Количество просмотров9.8K
Чтобы обеспечить надлежащий уровень безопасности для инфраструктуры IoT, необходима стратегия всесторонней защиты. В рамках неё обеспечивается защита данных в облаке, защита целостности данных при передаче в Интернет, а также безопасное производство устройств.

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


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

Биология поведения человека: Лекция #1. Введение [Роберт Сапольски, 2010. Стенфорд]

Время на прочтение1 мин
Количество просмотров34K
Уже давно мы получили одобрение от профессора Стенфордского университета Роберта Сапольски на перевод и озвучку его авторского курса по биологии «Биология поведения человека»:


Книга «Изучаем Arduino. 65 проектов своими руками»

Время на прочтение5 мин
Количество просмотров25K
image Приходилось ли вам, разглядывая какое-нибудь устройство, задумываться над тем, как оно работает в действительности? Возможно, это был катер с дистанционным управлением, лифт, автомат по продаже напитков или электронная игрушка? А может быть, вам хотелось самому создать робота, придумать электронное управление для модели железной дороги? Или у вас вдруг возникало желание организовать получение и анализ долгосрочного прогноза погоды? Как и с чего вы могли бы начать собственный проект?

Плата Arduino поможет на практике раскрыть некоторые секреты электроники. Cозданная Массимо Банци и Дэвидом Куартиллье, система Arduino предлагает бюджетный способ создания интерактивных проектов и объектов, таких как дистанционно управляемые роботы, системы записи пройденного маршрута на основе GPS и электронные игры.

В этой книге обзор 65 проектов. Пример одного проекта под катом.
Читать дальше →

Интерактивный C#

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


Обновление с номером 1 принесло в Visual Studio не только немного измененный значок, но и еще разные приятные нововведения. Кстати, вот так выглядит новый значок:



Одним из дополнений является «Интерактивный C#». Фактически это окошко REPL.
Подробнее о REPL и Интерактивном C#

Работаем с состояниями экранов в Xamarin.Forms

Время на прочтение5 мин
Количество просмотров15K
Друзья! Мы рады представить новый материал на тему разработки мобильных приложений на Xamarin.

В новой статье мы рассмотрим, как в Xamarin.Forms реализовывать управлениями состояниями окон (идет загрузка данных, отсутствует интернет и другие) на XAML.

Все статьи из колонки можно найти и прочитать по ссылке #xamarincolumn

Один экран, много состояний


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



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


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

Нечёткий поиск в тексте и словаре

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

Введение


Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
  • Расстояние Левенштейна
  • Расстояние Дамерау-Левенштейна
  • Алгоритм Bitap с модификациями от Wu и Manber
  • Алгоритм расширения выборки
  • Метод N-грамм
  • Хеширование по сигнатуре
  • BK-деревья
А также проведу сравнительное тестирование качества и производительности алгоритмов.
Читать дальше →

Математика для искусственных нейронных сетей для новичков, часть 1 — линейная регрессия

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

Часть 1 — линейная регрессия
Часть 2 — градиентный спуск
Часть 3 — градиентный спуск продолжение

Введение


Этим постом я начну цикл «Нейронные сети для новичков». Он посвящен искусственным нейронным сетям (внезапно). Целью цикла является объяснение данной математической модели. Часто после прочтения подобных статей у меня оставалось чувство недосказанности, недопонимания — НС по-прежнему оставались «черным ящиком» — в общих чертах известно, как они устроены, известно, что делают, известны входные и выходные данные. Но тем не менее полное, всестороннее понимание отсутствует. А современные библиотеки с очень приятными и удобными абстракциями только усиливают ощущение «черного ящика». Не могу сказать, что это однозначно плохо, но и разобраться в используемых инструментах тоже никогда не поздно. Поэтому моей первичной целью является подробное объяснение устройства нейронных сетей так, чтобы абсолютно ни у кого не осталось вопросов об их устройстве; так, чтобы НС не казались волшебством. Так как это не математический трактат, я ограничусь описанием нескольких методов простым языком (но не исключая формул, конечно же), предоставляя поясняющие иллюстрации и примеры.

Цикл рассчитан на базовый ВУЗовский математический уровень читающего. Код будет написан на Python3.5 с numpy 1.11. Список остальных вспомогательных библиотек будет в конце каждого поста. Абсолютно все будет написано с нуля. В качестве подопытного выбрана база MNIST — это черно-белые, центрированные изображения рукописных цифр размером 28*28 пикселей. По-умолчанию, 60000 изображений отмечены для обучения, а 10000 для тестирования. В примерах я не буду изменять распределения по-умолчанию.
Читать дальше →

Когда использовать Parallel.ForEach, а когда PLINQ

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

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach


Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<TSource>(
			 IEnumerable<TSource> source,
			 Action<TSource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ


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

Выполнение независимых операций


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

Повышаем эффективность работы в Xamarin.Forms

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


Друзья! Очередная статья на тему разработки мобильных приложений на Xamarin. Мы не прекращаем рассматривать особенности использования Xamarin.Forms при разработке бизнес-приложений для iOS и Android. Все статьи из колонки можно найти и прочитать по ссылке #xamarincolumn
В прошлой статье мы рассмотрели, как можно повысить продуктивность при разработке мобильных приложений с использованием Xamarin, а также отметили базовые механизмы повышения производительности бизнес-приложений на базе Xamarin.Forms.

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

Что такое бизнес-приложения?


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


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

Методы модификации машинного кода: «селекция» vs. «генная инженерия»

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


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

«Мутации» машинного кода


В качестве примера возьмём приставку NES (известную у нас как Dendy), в которой используется процессор 6502. Система команд у него очень проста — опкод представлен всегда одним байтом, и каждый из 256 хоть что-то, да делает. Никаких «защит» от дурака не предусмотрено, и почти любой случайный набор байт будет выполняться без сопротивления со стороны процессора. Таким образом, мы можем взять ROM какой-нибудь игры, исправить в нём случайные биты (будем называть это «мутациями») — и после запуска наблюдать забавные глюки в разных неожиданных местах, но при этом в целом игра скорее всего будет работоспособной. Похоже, что на YouTube имеется целый жанр подобного видео. Полученный таким образом машинный код наверняка не очень корректен, но в большинстве случаев процессор сможет его выполнить и что-то сделать.

Как оказалось, такую методику используют не только для веселья (а играть в знакомые игры с неожиданными глюками весьма забавно), но и для полученя вполне себе конкретных модификаций: делают большое количество «мутантов» и ищут тот, в котором проявился нужный эффект. Точь-в-точь как в современных методах селекции, когда зародыши организмов подвергаются воздействию мутагенов (что приводит к случайным изменениям в генетическом коде), а потом из того что смогло вырасти отбираются те, у которых есть нужный признак. Полученные таким образом организмы получают в довесок массу других нежелательных мутаций. Избавляются от них путем постепенного скрещивания c нормальным видом, добиваясь получения более-менее вменяемого организма с нужным признаком и минимумом других мутаций, которые оказались заметны. То же самое можно сделать и с машинным кодом.
Читать дальше →

Когда строка не является строкой?

Время на прочтение6 мин
Количество просмотров21K
В рамках моей «работы» над стандартизацией C# 5 в технической группе ECMA-334 TC49-TG2 мне посчастливилось увидеть несколько интересных способов, которыми Владимир Решетников проверял C# на прочность. В данной статье описана одна из проблем, которые он поднял. Разумеется, она, скорее всего, никак не затронет 99.999% C#-разработчиков… но разобраться все равно любопытно.

Спецификации, используемые в статье:


Что такое строка?


Как бы вы объявили тип string (или System.String)? Я могу предположить несколько вариантов ответа на данный вопрос, от расплывчатых до довольно конкретных:

  • «Какой-нибудь текст в кавычках»
  • Последовательность символов
  • Последовательность символов Юникода
  • Последовательность 16-битных символов
  • Последовательность слов UTF-16

Только последнее утверждение полностью верно. Спецификация C# 5 (раздел 1.3) гласит:

Обработка строк и символов в C# использует UTF-16. Тип char представляет слово UTF-16, а тип string – последовательность слов UTF-16.

Пока всё в порядке. Но это C#. А как насчет IL? Что используется там, и имеет ли это значение? Оказывается, что имеет… Строки должны быть объявлены в IL как константы, и природа этого способа представления важна – не только кодировка, но и интерпретация этих закодированных данных. В частности, последовательность слов UTF-16 не всегда может быть представлена в виде последовательности слов UTF-8.
Читать дальше →

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

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

Разработка Need For Speed III Modern Patch

Вообще я достаточно редко играю в компьютерные игры. Бывало, не играл по несколько лет подряд. Но иногда во мне просыпается маленький реверс-инженер, который мотивирует меня забраться в машинный код какой-нибудь любимой игрушки из прошлого. В последний год я занимался доработкой Need For Speed III: Hot Pursuit (1998 года). Это моя любимая игра в жанре, но теперь я, к своему сожалению, знаю о том, насколько отвратительно она написана. Большое количество маленьких багов в самых неожиданных местах — прямое следствие низкого качества кода.
Читать дальше →

Создание API: в рамку и на стену

Время на прочтение5 мин
Количество просмотров57K
Каждый программист — проектировщик API. Хорошие программы состоят из модулей, а протокол взаимодействия модулей — это тоже API. Хорошие модули используются повторно.

API — это большая сила и большая ответственность. У хорошего API будут благодарные пользователи; поддержка плохого превратится в кошмар.

Публичный API — не воробей, опубликуешь — не уберешь. Есть только одна попытка сделать все правильно, поэтому постарайся.

API должно быть легко использовать, но сложно использовать неправильно. Сделать что-то простое с помощью такого API должно быть просто; сложное — возможно; сделать что-то неправильно должно быть невозможно, или, по крайней мере, трудно.

API должен описывать сам себя. Изучение кода на таком API не вызывает желания читать комментарии. Вообще, комментарии редко нужны.

Перед разработкой API собери требования с долей здорового скептицизма. Осознай общие задачи и реши их.

Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.
Читать дальше →

Кастомные события JavaScript

Время на прочтение2 мин
Количество просмотров68K
Перевод статьи «JavaScript CustomEvent», David Walsh

С самого появления JavaScript, события были шлюзом ко взаимодействию пользователя в браузере. События сообщают нам не только о том, что происходит взаимодействие, но также вид взаимодействия, задействованные элементы и предоставляют методы для работы с событием. Создание и инициирование(triggering) кастомных событий всегда являлось более сложной задачей. С использованием JavaScript CustomEvent API, эта сложность может быть устранена. CustomEvent API позволяет разработчикам не только создавать кастомные события, но также инициировать их на элементах DOM, передавая данные по цепочке. Самое главное, что API максимально прост!
Читать дальше →

Мы ещё повоюем! Выжимаем «все соки» из устаревшего смартфона

Время на прочтение9 мин
Количество просмотров59K
Привет, Гиктаймс! Сторонники экономии всегда спорят с оппонентами, которые считают, что нужно просто больше зарабатывать, а любители оптимизации в IT заводятся с пол-оборота от фразы «купите уже себе нормальное железо». И те, и другие по-своему правы, но сегодня мы перейдём на сторону «романтиков», и расскажем, как заставить работать старый смартфон с полной отдачей.
Читать дальше →

Построение хексапода для тех кто не хочет мастерить, а хочет программировать

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

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

Краткое предисловие:

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

Другой неприятной стороной было то что в качестве мозгов в основном использовались — если не ардуино, то STM32. Мне же хотелось занимтаься программированием. Научить робота бегать за мячиком, обходить препятсвия, передвигаться по открытомй пространству. То есть то, для чего надо больше чем ардуина. Упирались все желания в деньги, которых мало, и руки, которые кривые. Постараюсь поведать как оба этих препятствия я обошел.
Читать дальше →

Отправляем данные с Arduino в Azure IoT Hub

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


Не так давно я стал счастливым обладателем Genuino MKR1000. Ресурс Hackster.io совместно с Microsoft проводил конкурс на лучшую идею. Пусть я не успел воплотить свою идею в жизнь и принять участие во второй части конкурса, но я могу поделиться с вами информацией, которая поможет вам осуществить свои задумки. Под катом о том, как отправить данные с Arduino в облако и как их считать, если у вас есть WiFi шилд или MKR1000.
Читать дальше →

Валидация: внутри сущностей или снаружи?

Время на прочтение3 мин
Количество просмотров21K
Обратите внимание, что хотя пост написан от первого лица, это перевод статьи из блога Jimmy Bogard, автора AutoMapper.

Меня часто спрашивают, особенно в контексте архитектуры вертикальных слоев (vertical slice architecture), где должна происходить валидация? Если вы применяете DDD, вы можете поместить валидацию внутри сущностей. Но лично я считаю, что валидация не очень вписывается в ответственность сущности.

Часто валидация внутри сущностей делается с помощью аннотаций. Допустим, у нас есть Customer и его поля FirstName/LastName обязательны:
public class Customer
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}

Проблем с таким подходом две:
  • Вы изменяете состояние сущности до валидации, то есть ваша сущность может находиться в невалидном состоянии
  • Неясен контекст операции (что именно пытается сделать пользователь)

И хотя вы можете показать ошибки валидации (обычно генерируемые ORM) пользователю, не так-то просто сопоставить исходные намерения и детали реализации состояния. Как правило, я стараюсь избегать такого подхода.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Днепр, Днепропетровская обл., Украина
Дата рождения
Зарегистрирован
Активность