Pull to refresh
17
0
Алексей Харламов @haxecoder

Разработчик игр

Send message

Raspberry Pi, небольшой помощник в удаленной работе (два варианта дистанционного включения ПК)

Reading time10 min
Views21K

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

Реализацию осуществил двумя способами: первый с помощью SIP сервера Freeswitch, посредством телефонного соединения через IVR меню; второй способ с помощью системы домашней автоматизации ("Умный Дом") MajorDoMo.

Устройство, выполняющее отправку «магического пакета» - мини компьютер Rasberry Pi Model 3B, в первом случаю выполняет роль IP АТС, во втором сервер «Умного Дома».
Первоначальная идея была создание возможности удаленного управления элементами "Умного Дома" при отсутствии (блокировки, нестабильной связи и т.д.) сети Internet или отдельных сервисов. Однако для написания статьи я выбрал наиболее актуальное (для меня) применение. Итак, основная задача: набрав с телефона номер своего «Умного дома» и введя подтверждение, дистанционно включить свой ПК.

Читать далее
Total votes 6: ↑3 and ↓30
Comments32

Домашний DPI, или как бороться с провайдером его же методами

Reading time16 min
Views239K

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

Вообще, эта проблема имеет несколько решений... Но я решил бороться с провайдером их же методом.

...При помощи NGINX!
Total votes 179: ↑178 and ↓1+244
Comments187

Устройство поисковых систем: базовый поиск и инвертированный индекс

Reading time24 min
Views26K

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

В статье описано устройство поиска, инвертированного индекса и его оптимизаций с отсылками к теории. В качестве подопытного кролика взят Tantivy — реализация архитектуры Lucene на Rust. Статья получилась концентрированной, математикосодержащей и несовместимой с расслабленным чтением хабра за чашкой кофе, осторожно!
Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments6

Решение Fizzbuzz при помощи теоремы Эйлера

Reading time4 min
Views13K
image

FizzBuzz — это известная задачка на программирование, которую обычно дают в технической части собеседований. Она формулируется примерно так:

Напишите функцию, выводящую список целых чисел от 1 до 100, но вместо каждого числа, кратного 3, она должна выводить «Fizz», а вместо каждого числа, кратного 5, выводить «Buzz». Вместо чисел, кратных и 3, 5, программа должна выводить «FizzBuzz»; все остальные числа должны выводиться без изменений.

Можно написать функцию, вообще не использующую условную логику и вместо этого разделяющую целые числа на 4 возможные категории (обычное решение оставим в качестве упражнения заинтересованному читателю):

  1. Имеющие делитель 3, но не 5
  2. Имеющие делитель 5, но не 3
  3. Имеющие делитель и 3, и 5
  4. Не имеющие делитель 3 и 5

Нам нужна функция, которая будет возвращать:

  • «Fizz», если $n \equiv 0 \pmod 3$ и $n$ является взаимно простым с 5
  • «Buzz», если $n \equiv 0 \pmod 5$ и $n$ является взаимно простым с 3
  • «FizzBuzz», если $n \equiv 0 \pmod 3$ и $n \equiv 0 \pmod 5$
  • $n$ во всех остальных случаях.

Рассмотрим реализацию такой функции на Python:

[(lambda n: { 1: n, 6: "Fizz", 10: "Buzz", 0: "FizzBuzz" }[n**4%15])(n+1) for n in range(100)]

Та же функция на Ruby:

(1..100).map{|n| {1 => n, 6 => "Fizz", 10 => "Buzz", 0 => "FizzBuzz"}[n**4%15] }

Как мы и ожидали, каждая из этих функций возвращает список целых чисел от 1 до 100 с подставленными в нужные места «Fizz», «Buzz» и «FizzBuzz».

Но почему? Откуда взялись постоянные значения 0, 6, 10 и 1? Почему $n^4 \mod 15$ возвращает 6 для чисел, кратных 3, но не 5, 10 для чисел, кратных 5, но не 3, 0 для чисел, кратных 5 и 3 и 1 во всех остальных случаях? И самое важное — справедливо ли это для любого $n$, которое мы выберем?
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments13

Трюк с XOR для собеседований и не только

Reading time8 min
Views105K


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

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

Дан массив из n — 1 целых чисел, находящихся в интервале от 1 до n. Все числа встречаются только один раз, за исключением одного числа, которого нет. Найдите отсутствующее число.

Разумеется, существует множество прямолинейных способов решения этой задачи, однако есть и довольно неожиданный, в котором применяется XOR.
Читать дальше →
Total votes 76: ↑70 and ↓6+80
Comments104

Использование алгоритма Прима для генерации соединённых друг с другом пещер

Reading time4 min
Views13K


Я решил объяснить один из алгоритмов генерации карты, используемых в моей игре In the House of Silence. Главное преимущество этого способа заключается в том, что в отличие от других алгоритмов, он никаким образом не может сгенерировать карту с разделёнными частями.

Генерация идеального лабиринта



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

Для понятности я привёл псевдокод, описывающий алгоритм Прима. Будет довольно просто приспособить его под любой язык программирования.
Читать дальше →
Total votes 50: ↑50 and ↓0+50
Comments5

Как перестать бояться и полюбить регулярные выражения

Reading time6 min
Views20K

В работе и повседневной жизни мы буквально окружены текстами: книги и статьи, письма и чаты, веб-страницы и программный код. Да что там — сама биологическая жизнь основана на ДНК. И для эффективной работы по поиску или модификации текста уже давно был придуман мощный инструмент — регулярные выражения, или regex. Однако по ряду причин далеко не все их используют, или имеют дело с ними только когда заставили при крайней необходимости. В этой статье я попытаюсь исправить эту печальную ситуацию.



Чтобы функции отыскать, воедино созвать и единою чёрною волей сковать.
Читать дальше →
Total votes 28: ↑25 and ↓3+28
Comments27

Простой туториал React Router v4

Reading time8 min
Views411K
image

Автор @pshrmnОригинальная статьяВремя чтения: 10 минут

React Router v4 — это переработанный вариант популярного React дополнения. Зависимые от платформы конфигурации роутов из прошлой версии были удалены и теперь всё является простыми компонентами.
Total votes 25: ↑24 and ↓1+23
Comments14

13 игр, чтобы поиграть, взломать и убить ими эти выходные

Reading time4 min
Views12K
В конце ноября у нас стартует новый поток курса Разработчик игр на Unity и C#, и специально к нему мы делимся подборкой игр на тему Хеллоуина. Все они создавались на соревнованиях вроде Ludum Dare, JS13K и Game Off. Игры написаны на разных языках и движках, причём некоторые из них созданы всего за 48 часов. И у всех этих игр есть общая черта: исходный код этих игр открыт, так что давайте уже рубить и кромсать его! Пост не претендует на «высокий технический уровень», это просто подборка забавных проектов, которые, возможно, вдохновят вас на создание своих игр.

ВНИМАНИЕ: в этом посте есть зомби, оборотни, существа из других измерений, мумии и многое другое! Действуйте на свой страх и риск.


Приятного чтения!
Total votes 18: ↑13 and ↓5+14
Comments3

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

Reading time5 min
Views3.5K
image

Тот кто когда-нибудь задумывался о том как работает графическая часть 2д ретро ускорителя, примерно представляет как именно она рисует эти пресловутые Tiles, которые к слову из определения не обязаны быть прямоугольными. Тайлинг это про замощение плиткой. Да чаще всего разработчики железного апи понимают это и методы соответственно называют drawRect а не drawTile. Любой прямоугольник действительно может быть тайлом, но обратное не верно! И тут назревает вопрос: Почему 2D ускорители упорно ускоряют только rect… Простой ответ на этот вопрос потому что все остальное слишком сложно для простой железки. Но тут я бы и поспорил. Можно предложить как минимум одно простое, но очень функциональное расширение этой базовой абстракции, следующее.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments22

Jenkins Scripting Pipeline — генерация стадий выполнения

Reading time8 min
Views18K

Всем привет! В интернете довольно много статей, связанных с Declarative Jenkins pipeline, и совсем немного о Jenkins Scripting Pipeline, хотелось бы восполнить этот пробел.


image

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments1

Дешёвый сервер из китайских запчастей. Часть 1, железная

Reading time12 min
Views63K

Дешёвый сервер из китайских запчастей. Часть 1, железная



Размытая кошка позирует на фоне настраиваемого сервера. На заднем плане – мышка на сервере


Привет, Хабр!


В жизни каждого человека иногда назревает необходимость апгрейда компьютера. Иногда это покупка нового телефона взамен разбитого или в погоне за свежими андроидом или камерой. Иногда – замена видеокарты, чтобы тянула игру на минималках. Иногда – установка SSD в ноутбук, на который вы вкорячили десятую винду, а ей не очень нравится жить на Core2Duo и 2.5 гигабайтах адресуемой памяти, и она всё время выгружает неиспользуемые страницы в файл подкачки, изничтожая и без того не великую скорость обмена с 32-гиговым диском.


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


Сначала будет немного скучного вводного текста, а потом пойдут картинки.

Читать дальше →
Total votes 31: ↑28 and ↓3+33
Comments94

Особенности сборки и доставки iOS-приложений

Reading time8 min
Views19K
В этой статье Максим Шестаков, DevOps Engineer в студии Plarium Krasnodar, делится опытом сборки и доставки пользователям приложений для iOS, который накопился в процессе отладки CI/CD.

Читать дальше →
Total votes 9: ↑8 and ↓1+9
Comments20

Shader — это не магия. Написание шейдеров в Unity. Введение

Reading time5 min
Views39K
Всем привет! Меня зовут Дядиченко Григорий, и я основатель и CTO студии Foxsys. Сегодня хочется поговорить про шейдеры. Умение писать шейдеры (и в целом работать с рендером) очень важно при разработке под мобильные платформы или AR/VR, если хочется добиться крутой графики. Многие разработчики считают, что шейдеры — это магия. Что по ним мало хорошей информации, и что чтобы их писать нужно иметь, как мимимум, звание кандидата наук. Да, разработка шейдеров по своим принципам сильно отличается от клиентской разработки. Но основное понимать базовые принципы работы шейдеров, а так же знать их суть, чтобы в этом не было ничего магического и поиск информации по этой теме был простой задачей. Данная серия статей рассчитана на новичков, так что если вы разбираетесь в программировании шейдеров, данная серия вам не будет интересна. Всем же кто хочет разобраться в этой теме — добро пожаловать под кат!


Total votes 17: ↑17 and ↓0+17
Comments17

Сборка Android-проекта в Docker-контейнере

Reading time4 min
Views24K
Разрабатывая проект под платформу Android, даже самый небольшой, рано или поздно приходится сталкиваться с окружением для разработки. Кроме Android SDK, необходимо чтобы была последняя версия Kotlin, Gradle, platform-tools, build-tools. И если на машине разработчика все эти зависимости решаются в большей мере с помощью Android Studio IDE, то на сервере CI/CD каждое обновление может превратиться в головную боль. И если в web-разработке, решением проблемы окружения стандартом стал Docker, то почему-бы не попробовать решить с помощью него аналогичную проблему и в Android-разработке…
Читать дальше →
Total votes 9: ↑7 and ↓2+5
Comments25

Краткое введение в цепи Маркова

Reading time16 min
Views192K
image

В 1998 году Лоуренс Пейдж, Сергей Брин, Раджив Мотвани и Терри Виноград опубликовали статью «The PageRank Citation Ranking: Bringing Order to the Web», в которой описали знаменитый теперь алгоритм PageRank, ставший фундаментом Google. Спустя чуть менее двух десятков лет Google стал гигантом, и даже несмотря на то, что его алгоритм сильно эволюционировал, PageRank по-прежнему является «символом» алгоритмов ранжирования Google (хотя только немногие люди могут действительно сказать, какой вес он сегодня занимает в алгоритме).

С теоретической точки зрения интересно заметить, что одна из стандартных интерпретаций алгоритма PageRank основывается на простом, но фундаментальном понятии цепей Маркова. Из статьи мы увидим, что цепи Маркова — это мощные инструменты стохастического моделирования, которые могут быть полезны любому эксперту по аналитическим данным (data scientist). В частности, мы ответим на такие базовые вопросы: что такое цепи Маркова, какими хорошими свойствами они обладают, и что с их помощью можно делать?
Читать дальше →
Total votes 51: ↑51 and ↓0+51
Comments11

Смотрим фильмы дома: 10 материалов о строительстве домашнего кинотеатра и выборе оборудования

Reading time3 min
Views16K
Это — подборка статей из нашего блога «Мир Hi-Fi». Здесь есть материалы, которые помогут вам собрать достойный домашний кинотеатр и подготовить для него помещение. Под катом — немного о телевизорах, советы по акустической коррекции и правила расстановки колонок.

Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments5

Способы применения и искажения меткости в играх. Наглядные графики для сравнения

Reading time6 min
Views15K
Вычислять факт попадания в играх на основе полученной меткости можно по разному:

  • сравнивая с одним псевдослучайным числом (которое тоже можно получать по разному [1]);
  • сравнивая с наибольшим или наименьшим из двух псевдослучайных чисел;
  • сравнивая среднее из двух и более случайных чисел (среднее тоже можно считать по разному).


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

Точно также по разному можно рассчитывать наносимый урон, особенно на основе дайсов (кубиков).

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

В статье будут представлены наглядные графики изменения реальных вероятностей в разных подходах, что позволит быстрее в них сориентироваться и принять лучшее решение.
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments33

Локализация приложений для китайского рынка

Reading time5 min
Views41K
Собственно, ни для кого не секрет, что рынок КНР (а еще и Гонконга и Тайваня) — мечта для любого игропроизводителя. Учитывая азарт китайцев, их внушаемость и распространенность мобильных телефонов среди населения (а также количество абонентов), удачный вход на китайский рынок может принести огромную прибыль.

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


Читать дальше →
Total votes 70: ↑66 and ↓4+62
Comments29

Локализация Android приложения средствами Google Sheets

Reading time4 min
Views8.8K
Добрый день!

В данной статье хотелось бы поделиться своим небольшим опытом использования Google Таблиц при локализации Android приложения. Изначально требовалось перевести разрабатываемое приложение только на язык заказчика, т.е. норвежский. В это время в IntelliJ Idea не существовало Translations Editor'a, а Android Studio готовилось к выходу из беты.

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

TL;DR готовый документ. Чтобы получить файлы strings.xml, жмем Export Files -> Export sheets to strings.xml. Приложение Google Drive, которое должно быть установлено на вашей машине, скачает результат.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments10

Information

Rating
4,025-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity