Search
Write a publication
Pull to refresh
26
0
Янчишин Руслан @r_ii

Разработчик

Send message

Введение в Android NDK

Reading time9 min
Views243K
Для разработки приложений под ОС Android, Google предоставляет два пакета разработки: SDK и NDK. Про SDK существует много статей, книжек, а так же хорошие guidelines от Google. Но про NDK даже сам Google мало что пишет. А из стоящих книг я бы выделил только одну, Cinar O. — Pro Android C++ with the NDK – 2012.

Эта статья ориентирована на тех, кто ещё не знаком (или мало знаком) с Android NDK и хотел бы укрепить свои знания. Внимание я уделю JNI, так как мне кажется начинать нужно именно с этого интерфейса. Так же, в конце рассмотрим небольшой пример с двумя функциями записи и чтения файла. Кто не любит много текста, тот может посмотреть видео версию.
Читать дальше →

Полет квадрокоптера на высоте 1км

Reading time2 min
Views231K
Всегда было интересно как мир выглядит с высоты. Что видят птицы, чего не видно на картах googleEarth. Так пришло увлечение мультикоптерами, летать под облаками, фотографировать, снимать видео.


Подробности полета

FindBugs помогает узнать Java лучше

Reading time7 min
Views52K
Статические анализаторы кода любят за то, что они помогают найти ошибки, сделанные по невнимательности. Но гораздо интереснее то, что они помогают исправить ошибки, сделанные по незнанию. Даже если в официальной документации к языку всё написано, не факт, что все программисты это внимательно прочитали. И программистов можно понять: всю документацию читать замучаешься.

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

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

Тернарный оператор ?:


Казалось бы, нет ничего проще тернарного оператора, но у него есть свои подводные камни. Я считал, что нет принципиальной разницы между конструкциями
Type var = condition ? valTrue : valFalse;
и
Type var;
if(condition)
  var = valTrue;
else
  var = valFalse;

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

Динамическое освещение и неограниченное количество источников произвольной формы в 2D

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


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

Sprite Lamp: динамическое освещение 2D-объектов

Reading time2 min
Views67K
Австралийский разработчик indie-игр Финн Морган (Finn Morgan) разработал очень интересную и полезную технологию для динамической подсветки 2D-спрайтов Sprite Lamp. Изюминкой этой программы является то, что для подсветки объекта с произвольной точки не требуется построение 3D-модели.



Скоро каждый сможет использовать Sprite Lamp в своих играх.
Читать дальше →

Потеря точности из Double во Float или «Куда пропадали копейки?»

Reading time7 min
Views56K
Преобразование чисел из одного типа в другой обычно ведется таким образом, чтобы не потерять лишних чисел, т.е. из меньшего типа к более вместительному. Но что, если предыдущий разрабочик использовал конвертацию из Double во Float и стали пропадать копейки в отчетах?
В статье приводится изучение конвертации плавающих чисел в Java:
    99999999.33333333 -> 100000000.0000000
    98888888.33333333 ->  98888888.0000000
     2974815.78000000 ->   2974815.7500000

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

Беспроводной звук. Часть 1. Препарируем Bluetooth

Reading time20 min
Views318K
Иногда, бывает, натыкаешься на какой-то баг впервые, списываешь все на обстоятельства и забываешь о нем. Затем он повторяется снова и снова, вынуждая тебя приступить к поиску проблем и, по возможности, их устранению. И вот когда ты обнаруживаешь себя в глубокой ночи за анализом дампом/дебагом/чтением_мануалов, то становится понятно, дело на полпути бросать уже нельзя и дело принципа — довести его до конца.

Такая история со мной приключилась в момент обзора с коллегой r3s потребительской беспроводной Bluetooth-акустики Klipsch KMC 3. Я столкнулся с ситуацией, когда «беспроводной» аудиопоток начинал безбожно прерываться, стоило лишь мне расположить источник звука у себя за спиной. Пищи для размышлений мне подкинула другая Bluetooth-аудиосистема, которая в тех же условиях вела себя куда лучше. Такая простая проблема выродилась в нырок с головой во внутренности протокола Bluetooth и детали передачи аудио с его помощью.

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

SlideStackView или Extending ViewGroup в Android (часть 2)

Reading time31 min
Views10K


Недавно я рассказывал о своём опыте разработки SlideStackView в мобильной почте Mail.Ru под Android. Тогда я пообещал, что в ближайшее время подготовлю вторую часть, в которой расскажу о том, как реализовать наиболее интересную, с точки зрения программирования визуальных компонентов, часть. Естественно, речь пойдёт о том, что добавляет интерактивность в приложение — об анимации. Все уже давно привыкли к тому, что мобильное приложение должно быть отзывчивым к действиям пользователя. Очевидно, что основным способом взаимодействия с вашим приложением является использование Touch screen.
Читать дальше →

А знаете ли Вы, что возвращает .getClass()?

Reading time2 min
Views110K
Я думаю, почти любого Java разработчика когда-то спрашивали на собеседовании: «Какие есть методы у класса Object?»
Меня, по крайней мере, спрашивали неоднократно. И, если в первый раз это было неожиданностью (кажется, забыл про clone), то потом я был уверен, что уж методы Object'а-то я знаю;)

И каково же было мое удивление, когда спустя несколько лет разработки я наткнулся на собственное незнание сигнатуры метода getClass()

Под катом пара слов про Class, .class, .getClass и, собственно, сюрприз, на который я наткнулся.
Читать дальше →

С камерой в облака. Часть 1

Reading time6 min
Views242K


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

Пост состоит из 2 частей. В первой — ответы на основные вопросы. Их легко найти в интернете по-отдельности, но сложно вместе: дальность полета (чем ограничивается и какая максимальная), качество картинки, грузоподъемность, стоимость и сроки (от выделения бюджета до первого полета).

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

Ну что же, перейдем сразу к делу.
Читать дальше →

One Platform Foundation: Обзор AppDF и OpenIAB

Reading time3 min
Views6.4K
Всем привет!
Посетив YaC, я заинтересовался проектом OnePF и, чтобы углубить свои знания о нем, отправился на хабр.
К своему удивлению, нашел о нем лишь одно упоминание, да и то вскользь.

Раз такое дело, решил разобраться сам и поделиться с читателями хабра.


Любой Android-разработчик наверняка наслышан о «зоопарке» Android-устройств, но не все обращают внимание, что с Android-маркетами творится то же самое. Многие этого не замечают, т.к. ограничиваются лишь Google Play, но ребята из OnePF подвели статистику, которая показывает, что львиную долю из загрузок приложений занимают альтернативные GooglePlay-рынки. Следственно, пренебрегая ими, разработчик упускает аудиторию и выгоду.

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

Именно эту проблему и попытались автоматизировать и решить разработчики OnePF.

One Platform Foundation — проект, занимающийся разработкой стандартных механизмов и инструментов для комфортной работы со множеством Android-маркетов. На текущий момент проект активно разрабатывается и уже имеет два интересных решения:
  • AppDF — стандартизированный формат файла для универсальной загрузки приложений в Android-сторы.
  • OpenIAB — библиотека для прозрачной работы с разными системами In-App Billing.

А дальше подробнее...

Отзывчивое Android-приложение или 1001 способ загрузить картинку

Reading time16 min
Views55K
О реализации многопоточности при разработки Android-приложений уже написано немало. В этой же статье хочется провести сравнение нескольких распространенных на сегодня способов скачать/прочитать/сохранить/посчитать, при этом не дав пользователю повода для раздражения. Постараться понять, когда то или иное решение будет уместным, а чего лучше не делать вовсе. Попытаемся показать, почему привычных вещей, таких как класс Thread и пакет java.util.concurrent оказывается недостаточно, когда речь заходит об Android-приложении.

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

Сказ о том, как бы я продвигал сайт или не так страшно SEO как его малюют

Reading time9 min
Views88K

Сначала предметная область


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

Ключи/запросы


Это фразы, которые набираются в поиске, для достижения результата (ответа на вопрос, покупки, получения информации…)
По частотностям
НЧ – низкочастотные (величина вычисляется логарифмически относительно самого большого числа запросов по ВЧ запросу из категории), для простоты пусть будет все что ниже 300 запросов (хотя в каждой группе по разному).
СЧ – среднечастотные (величина вычисляется логарифмически относительно самого большого числа запросов по ВЧ запросу из категории), для простоты пусть это будет все что выше 300 и ниже 2000 запросов (хотя в каждой группе по разному).
ВЧ – максимальное значение количества поисков простого запроса, к примеру «Светильник».
По конкуренции
НК – низкоконкурентные запросы, по которым есть шанс двинуться в топ (мало точных вхождений поисковой фразы, мало главных страниц, низкое количество результатов в поисковой выдаче)
СК – средне конкурентные запросы, по которым есть шанс продвинуться в топ, но есть и конкуренция (весь топ занят или главными или точными вхождениями, но показатели ссылочной массы конкурентов низкие)
ВК – высококонкурентные запросы, по которым необходимо из кожи вон вылезти чтоб продвинуться (и топ весь занят, и ссылочная масса ужасающая) при средних бюджетах ВК топ недостижим, но можно долго работать, чтоб кардинально поменять выдачу (закупка сателлитов, ссылочной массы, грамотное внутренне СЕО).

Семантическое ядро


Предполагает, что будет оптимизироваться каждая страница сайта. Это значит, что страница конечно будет давать ответ на запрос пользователя, но при этом на ней должен быть материал, который включает в себя эти ответы. То есть признаки, по которым ПС сможет выдать именно эту страницу на это запрос…
Пока что это сами запросы пользователей – они же «КЛЮЧИ»
Ключевые фразы подбираются для каждой страницы персонально.
Для главной страницы берутся общие запросы (описывающие общую категорию и выделяющие общую тематику сайта).
Для страницы категории выбираются запросы более узкой тематики, выделяющие отдельную категорию в общей всего сайта.
Для страницы товара/услуги – берутся максимально конкретные запросы, отражающие ее суть и позволяющие максимально точно ее/его идентифицировать.

0 Стратегия: Тариф Беззаботный


Минимум затрат, так как трафик тупо покупается у ПС. Других вариантов нет.

1 Стратегия: На халяву


Низкоконкурентный трафик – занимается ниша, где есть спрос, но нет конкурентов – классический «кто первый встал – того и тапки».
Схема до боли проста – ищем свободные ниши, подбираем НК запросы, пишем материал (даем полезное на запрос пользователя) – попадаем в ТОП, для усиления эффекта можно закупить по парочке ссылок.
Посмотреть нормальные стратегии...

Будущее цифровой фотографии

Reading time6 min
Views18K

О графических форматах


Как известно существует большое количество разных типов файлов:
  • Текстовые (TXT, ...)
  • Программные (EXE, DLL, BAT, COM, ...)
  • Архивы (ZIP, GZ, ARJ, RAR, ...)
  • Графические (BMP, JPEG, PNG, GIF, ...)
  • Видео (AVI, MPEG, MP4, MKV, ...)
  • Звуковые (WAV, MP3, OGG, WMA, FLAC, APE, ...)
  • И другие

Графические в свою очередь делятся на векторные (WMF, CDR, SVG, ...) и растровые (BMP, JPEG, PNG, TIFF, RAW, ...).

А вот растровые я бы поделил ещё на две группы: 
  • Для хранения и обработки (RAW, BMP, HDR, TIFF, PSD, XCF и другие)
  • Для публикации (JPEG, GIF, PNG и другие)


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

А вот форматы для публикации имеют своей целью показать какую-нибудь особенность при минимальном объёме. Например:
Читать дальше →

Каверзные кватернионы

Reading time3 min
Views187K


Отгадайте загадку: в четырёх измерениях сидит и комплексными числами воротит?

Подсказка: это вектор со скаляром. И вещественная матрица. И придумал его Гамильтон.

Не помогло? Ну что вы, это же элементарно! Это кватернион! Кватернионы используют для записи вращений в робототехнике, игровых движках, ПО для моделирования и вообще везде, где не нужны проблемы с углами Эйлера или матрицами. Если вас испугала путаница выше с разными представлениями кватерниона, то можете быть спокойны. Кватернионы очень просты в использовании и их внутреннее строение может понадобиться только в очень редких случаях, где нужна тонкая оптимизация. В остальное время с помощью кватернионов можно крутить всё что угодно и как угодно, и оно будет плавно и красиво интерполироваться без шарнирных замков.
Что же такое кватернион?

Инди-игра для Android в цифрах

Reading time4 min
Views32K

Всем привет,

Сегодня, я хочу рассказать о запуске своего последнего проекта — «Shooting club 3», поделиться множеством самой разнообразной статистки о доходах, бюджетах, загрузках, в общем все то, что мне самому было бы интересно послушать о других играх. Конечно, мне хотелось чтобы этот топик был «success story», но, будем откровенны, пока это не так. Возможно, это из-за того, что игра еще совсем новая и со временем она «разгонится». По крайней мере, мы на это надеемся!
Читать дальше →

Как я собирал бесшумный компьютер

Reading time5 min
Views418K
Много лет назад я легко мог спать в полуметре от гудящего компьютера, со временем же стало очевидно, что посторонние шумы сильно мешают продуктивной работе. С тех пор я начал свои эксперименты по сбору бесшумного компьютера.
image
Каждый, кто хочет работать в тишине - добро пожаловать под кат

Новый алгоритм Disney Research способен превращать 2D фотографии в 3D-модели

Reading time2 min
Views32K
image
В Disney Research было разработано приложение, способное строить 3D-модели из обычных фотографий. Благодаря оригинальному алгоритму, программа способна из нескольких сотен изображений строить трехмерные модели сложных сцен прямиком из реальной жизни, и поэтому обещает стать полезным средством для создания фильмов, игр и моделей для 3D-принтеров.

Само построение 3D-модели из нескольких двумерных изображений, которые запечатлели объект с разных ракурсов, уже давно не в новинку, — но вот создание высоко детализированных окружений в большом разрешении оказалось трудной задачей из-за необходимости обрабатывать большое количество данных. Заслуга Disney Research в том, что созданный ими алгоритм умеет эффективно распоряжаться подобными масштабами данных, обрабатывая их без необходимости держать все данные в памяти одновременно.
Читать дальше →

Бесконечные неповторяющиеся текстуры с помощью мозаики Вана

Reading time4 min
Views49K


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

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

Как же быть? Есть один трюк — непериодические мозаики. Они лишены проблемы повторяемости и достаточно просты в реализации. Одну из таких мозаик придумал китайский математик Ван Хао в 1961 году. Элементы этой мозаики можно представить в виде прямоугольников с разноцветными гранями. Но чтобы понять принцип её работы, надо сначала разобраться в классическом методе заполнения площадей текстурами.
А классический метод таков...

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity