Search
Write a publication
Pull to refresh
3
0

Разработчик(в основном на С#)

Send message

Как управлять Kubernetes кластерами с помощью Flux, Helm Operator и Git submodules

Reading time8 min
Views17K

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

Читать далее

iOS in-app purchases, часть 5: обработка ошибок SKErrors

Reading time5 min
Views3K

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

Это пятая статья из нашей серии, посвящённой внедрению покупок на iOS. Познакомиться с предыдущими можно по ссылкам:

1. iOS in-app purchases часть 1: конфигурация и добавление в проект.

2. iOS in-app purchases часть 2: инициализация и обработка покупок.

3. iOS in-app purchases часть 3: серверная валидация покупок.

4. iOS in-app purchases часть 4: локальное тестирование покупок в XCode.

5. iOS in-app purchases часть 5: обработка ошибок SKErrors. - Вы тут.

Читать далее

Создание шутера с LeoECS. Часть 1

Reading time9 min
Views27K

Друзья, это первая статья по фреймворку LeoECS из предстоящей серии, которая позволит вам быстрее понять, как работать с LeoECS в Unity и решить некоторые виды проблем, возникающих на практике. Все советы, изложенные в них, не представляют собою какой-то свод правил, способы построения подходов, а скорее набор рекомендаций и best practices, которые помогут вам освоиться в работе с фреймворком. Перед чтением убедитесь, что вы понимаете принцип работы архитектурного паттерна Entity Component System (ECS), и ознакомьтесь с документацией LeoECS, так как в процессе изучения фреймворка мы создадим простую игру жанра Top-Down shooter, рассмотрим часто возникающие проблемы и способы решения, и отвлекаться на различные вопросы, связанные с концепцией ECS, не будем.

Читать далее

Динамическая JIT компиляция С/С++ в LLVM с помощью Clang

Reading time10 min
Views10K


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

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

Оказывается, интерфейс Clang меняется от версии к версии и все найденные мной примеры были старыми и не запускались в актуальной версии (Сlang 12), а стабильный C-style интерфейс предназначен для парсинга и анализа исходников и с помощью которого сгенерировать исполняемые файлы не получится*.

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

А теперь публикую результат своих изысканий в виде рабочего примера динамической компиляции С++ кода с последующей его загрузкой и выполнением скомпилированных функций. Исходники адаптированны под актуальную версию Clang 12. Пояснения к коду я перевел и дополнил перед публикацией, а ссылки на исходные материалы приведены в конце статьи.

  • *) Кажется в 14 версии планируется реализовать C интерфейс для генерации исполняемых файлов.
  • **) На самом деле, Clang может (или теперь может) компилировать файлы из оперативной памяти, поэтому в исходники я добавил и эту возможность.
Читать дальше →

Готовимся к Windows 11: добавляем поддержку полноценной клавиатуры в Android-приложение

Reading time4 min
Views9.3K

Многие мобильные приложения уже могут конкурировать с полноценными десктопными вариантами, а иногда и превосходить их. Офисные пакеты, фоторедакторы и IDE вполне неплохо работают на портативных девайсах. Samsung, например, даже сделал специальный режим DeX Mode, который позволяет подключить к смартфону монитор и периферию.

А скорый релиз Windows 11 с возможностью устанавливать любые APK-файлы прямо намекает, что пора озаботиться поддержкой десктопных режимов в своих мобильных приложениях. Один из шагов к этому — добавить полноценную поддержку клавиатуры, чем сегодня и займёмся.

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

Читать далее

Как я написал веб-синтезатор без сэмплов и зависимостей

Reading time10 min
Views4.9K

Немного зная теорию музыки, чтобы создать цифровой инструмент, мы можем воспользоваться простыми HTML, CSS и JavaScript без каких-либо библиотек или аудиосэмплов. К старту курса по Frontend-разработке делимся статьёй, автор которой рассказывает, как написать простой, но эффектный синтезатор.

Читать далее

Рендеринг острова из «Моаны» менее чем за 10 000 строк кода на Swift

Reading time9 min
Views7.6K

После того, как Walt Disney Animation Studios выложила в сеть описание сцены острова из «Моаны», много кто пытался его отрендерить своими силами, исключающими оригинальный Hyperion. Это лишь малая часть списка таких движков:

Hyperion (естественно);

Renderman;

PBRT;

Embree/OSPRay;

A hobby renderer от Джо Шютте (с использованием Embree);

Moana на RTX (с использованием Optix);

GPU-Mononui (с использованием Optix).

Андреас Вендледер из Бабельсбергского киноуниверситета представил другой, написанный им рендерер Gonzales. Он в значительной степени вдохновлен PBRT, написан на Swift (с несколькими строками кода на C ++ для вызова OpenEXR и Ptex) и оптимизирован для проведения рендеринга в (сравнительно) разумные сроки на бесплатном хранилище Google Cloud (8 виртуальных ЦП, 64 ГБ RAM). Насколько автору известно, это единственный рендерер, написанный не на C/C++, способный на рендеринг этой сцены. Написан он с помощью vi и командной строки Swift в Ubuntu Linux и Xcode на macOS, так что скомпилировать его на этих платформах не должно составить труда.

Читать далее

«Оскар» для Intel Embree – трассируем лучи славы

Reading time9 min
Views2.8K
Как программисту получить самую известную и престижную кинопремию «Оскар»? Ударным трудом (по клавишам) заработать денег; пойти учиться на актёра, режиссера, оператора и так далее по списку номинаций Американской киноакадемии; и, наконец, поучаствовать в создании фильма, соответствующего новым правилам премии. Но есть и более короткий путь — достаточно просто хорошо поработать над проектом оптимизированной библиотеки ядер трассировки лучей Intel Embree, который в феврале 2021 года получил «Оскар» в номинации «Научные и технические достижения для киноиндустрии». Под катом — рассказ про этот оскароносный проект Intel.


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

Более 15 полезных инструментов для фронтендера с уклоном в CSS

Reading time5 min
Views13K

К старту курса по Frontend-разработке делимся переводом подборки различных инструментов: от генератора CSS, который рассчитывает пространство так, что брейкпоинты (контрольные точки) заменяются переменными, до редактора анимации прямо в браузере, а также средства масштабирования для отзывчивости в SVG и даже визуализатора специфичности CSS, который пригодится при анализе больших таблиц стилей. Мы структурировали и, где это было возможно, расширили оригинал, добавив информацию и примеры из репозиториев и официальных описаний инструментов.

Читать далее

Еще один пост о синхронизации в Vulkan

Reading time21 min
Views6K

Так, я наиграл в Fire Emblem: Three Houses уже порядка 160 часов в течение последней пары недель, думаю пришло время вновь побыть интернет-экспертом.

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

Читать далее

SMS через SIP messaging в Asterisk

Reading time7 min
Views14K

По немногочисленным просьбам трудящихся я расскажу как заворачивать GSM SMS из sip_dongle модуля для Asterisk в sip messaging с последующей маршрутизацией.

Немного ТЗ

Есть центральный узел Asterisk, на котором живет логика и пользователи (extensions). К нему подключаются через PJSIP другие оконечные Asterisk`и на которых висит по несколько GSM модемов.

- Одна из задач: принимать и отправлять GSM SMS сообщения правильно маршрутизируя их по номеру получателя.

- Вторая подзадача: дать нашим пользователям (extensions) возможность слать друг другу текстовые сообщения.

Итак. Что тут сложного и в чем подвох?

Когда у вас 1 модем и 1 extension все очень просто. Когда у вас 2 модема и 1 extension задача все еще простая.

Когда у вас “многое ко многим” — вот тут и кроется основна сложность. Т.е. нам нужно не просто понимать на какой конкретно модем какому конкретно Asterisk`у передать исходящее SMS, но и куда направить входящее из GSM сети сообщение. А так же что делать, если мы внутри себя не можем сообщения доставить.

Обозначения:

- gsmru 10.8.0.11 — оконечный сервер Asterisk на котором живут модемы
- 10.8.0.10 — центральный сервер Asterisk на котором крутится вся логика
- 101;102;103 - пользователи (extensions)
- sip - протокол ходит по 80му порту (так исторически сложилось)

Начнем разворачивать цепочку от оконечного Asterisk (gsmru) с модемами в сторону центрального сервера. Это канал приема сообщений и проще его объяснять именно так.

Работать с SMS можно по разному, но в моем случае я использую sqlite, который у меня /var/lib/asterisk/smsdb.sqlite3. Это сделано так чтобы можно было легко оперировать сообщениями, создавать очереди доставки в обе стороны и не переживать за всякие проблемы вида «я записал что-то в файл и мне нужно успеть это вычитать пока туда не записалось следующее, а заодно проверить что там нет «патча Бармина».

Читать далее

Энергия из черных дыр – выдумка или реальность?

Reading time5 min
Views22K
Кадр из фильма «Интерстеллар» (2014 г.) – черная дыра Гаргантюа

Черные дыры поглощают космические объекты и излучают колоссальное количество энергии. Казалось бы, вон он, идеальный источник чистой энергии, который нужен человечеству. Но есть ли шанс как-то к нему «подключиться»? Ученые уже задаются этим вопросом и недавно выработали новую стратегию, как осуществить этот замысел.
Читать дальше →

И снова про капчу

Reading time5 min
Views4.9K

Здесь на Хабре часто встречаются статьи про распознавание капчи. Всегда с большим интересом их читал, а сегодня настал и мой черёд написать. Путь от наивной реализации с Тессерактом до веб-сервиса со сложной нейросетью занял у меня около года. Количество ошибок распознавания удалось снизить с 90 до менее 1%.

Подробности под катом

Tesseract OCR, выделение распознанного текста на изображении

Reading time2 min
Views15K

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

Читать далее

Разработка Tizen-приложений для Samsung Smart TV: полный гайд для Javascript-разработчиков

Reading time12 min
Views53K

Эта статья рассказывает про удивительные приключения JS-разработчиков в мире ОС Tizen. В ней будет и пошаговая настройка рабочего окружения, и подключение «умного» телевизора Samsung вместе с пультом, и, конечно, сам процесс разработки и публикации приложения для Tizen Store — с примерами и подводными камнями. 

Так что если вы разделяете наше мнение о том, что Javascript — лучший язык программирования, потому что он работает практически везде – от домашнего Smart TV до кораблей SpaceX, то добро пожаловать под кат.

Читать далее

Что нового в API StoreKit 2 и как он упростил интеграцию покупок в приложении

Reading time8 min
Views7.6K

На недавно прошедшем WWDC 2021 представили новую версию StoreKit 2. Это фреймворк, который отвечает за осуществление покупок в iOS. Доля приложений со встроенными покупками и подписками постоянно растёт, и выпустив StoreKit 2, Apple заметно упростил интеграцию покупок в приложение. Сегодня мы рассмотрим работу с StoreKit 2 со стороны сервера, то есть с помощью App Store Server API.

Читать далее

Сервис распознавания капч, который больше не нужен

Reading time3 min
Views8.6K

Я уже рассказывал про свой опыт в области распознавания капчи. Разумеется, кроме чисто академического интереса у меня был и материальный - иногда приходится скачивать несколько файлов с обменника, а ждать паузу и вводить капчи я не люблю. Поэтому и пользуюсь программой для закачек под названием Universal Share Downloader, или сокращённо USD. Недавно сервис обмена файлами Turbobit в очередной раз внёс изменения в свой сайт, в результате чего моя программа оказалась бесполезной. Теперь я могу рассказать о сервисе распознавания поподробнее, уже не опасаясь приблизить этот момент. Может, рост числа бесплатных скачиваний в результате использования сервиса уже повлиял. Или это просто традиционная июньская пакость от обменника - то капчу поменяют, то скорость скачивания урежут.

Читать далее

Создание нейронной сети Хопфилда на JavaScript

Reading time8 min
Views16K

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

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

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

Читать много кода

Как увеличить скорость реакции Kubernetes на отказ узлов кластера?

Reading time5 min
Views5.2K

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

Тем не менее, когда узел выходит из строя, pods, спланированные на данный узел, продолжают работать на нём еще в течение некоторого времени, а также получать запросы. Думаю, это совсем не то поведение, которое вы ожидали от Kubernetes.

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

Читать далее

Лаги, джиттер и потеря пакетов: откуда берутся проблемы с неткодом и как их решать

Reading time11 min
Views81K

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

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

Читать далее

Information

Rating
4,616-th
Registered
Activity