Pull to refresh
3
0.2
Сергей @HSerg

Разработчик

Send message

Marmalade C++ и ShiVa3D: начало работы с игровыми движками для платформы Android x86

Reading time11 min
Views12K
Занимаетесь разработкой кросс-платформенного приложения или игры для Android? Если так, то вам стоит присмотреться к специальным инструментам. Например, к SDK Marmalade C++ 8.0 и игровому движку ShiVa3D. Сегодня мы поговорим об их применении для платформы Android x86.


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

OutOfMemoryError. Боремся с утечками памяти в Android

Reading time2 min
Views15K
В данной заметке мы рассмотрим несколько примеров утечек памяти в Android приложении. Также мы рассмотрим исправления этих утечек. Я хочу показать, что с утечками памяти можно и нужно бороться. Я не буду рассказывать про инструменты для анализа памяти, только лишь приведу ссылки на самые важные из них.
Осторожно много картинок.

Тонкая настройка ACPI на примере Thinkpad X220

Reading time6 min
Views28K

Лирика


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

Большую часть своего компьютерного стажа я пользуюсь лаптопами так называемой «бизнес серии»: IBM ThinkPad 600, HP-Compaq nc2400, Lenovo ThinkPad X61T, Lenovo ThinkPad X220.



Были кратковременные перерывы, когда приходилось перебиваться абы-чем, то бишь компьютерами потребительского сегмента: Apple ibook G4 и Acer aspire 5112 и именно в эти моменты приходило понимание того, как сильно не хватает таких очевидных и привычных вещей, как трекпоинт и док-станция.

Вот про док-станцию мы сейчас и поговорим.

Игроделу о субтитрах: теория и практика

Reading time10 min
Views16K
Красиво ли, удобно ли сделаны субтитры — это может повлиять на впечатления игрока. Но почему-то разработчики постоянно натыкаются на одни и те же грабли из небольшого — и легкоисправимого — списка. Эта статья напоминает три важнейших принципа и десять хороших советов, испытанных как в играх, так и в смежных отраслях. И заодно — кое-какие мысли о том, как собирать и обрабатывать информацию о пользователях.

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

image

Так что неудивительно, что в опросе CNet по субтитрам 79% игроков сказали, что играют с субтитрами. Цифра довольно ненаучная, но уже она говорит, что с субтитрами играют очень часто.

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

Динамические свет и тени в моей 2d игре

Reading time5 min
Views25K
Я работаю над игрой в жанре стесл-экшн, где в геймплее большую роль будут играть тени. Поэтому я сделал динамическое освещение/затенение, используя WebGL шейдеры.

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

Покрытие графов в тестировании ПО, часть 1

Reading time4 min
Views15K

Большинство программ и алгоритмов можно представить в виде графа, состоящего из набора вершин (N) и ребер (Е). Покрытие графов в тестировании полезно тем, что можно проектировать тесты, используя разные критерии покрытия, и выявить ошибки. Что касается тестирования черного ящика, то покрытие графов здесь тоже может иметь большое значение, если приходится работать с состояниями и переходами, графами состояний сущности и т.д. Если граф достаточно сложен, разные критерии покрытия позволят оценить достаточность тестового набора.
Читать дальше →

Проектирование в PostgreSQL документо-ориентированного API: Полнотекстовый поиск и сохранение многих документов(Часть 2)

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

Давайте сделаем это.
Читать дальше →

Основы безопасности операционной системы Android. Безопасность на уровне Application Framework. Binder IPC

Reading time6 min
Views46K

Вступление


После небольшого перерыва я продолжаю объяснять базовые принципы как обеспечивается безопасность в операционной системе Android. Сегодня я начну описывать безопасность на уровне Application Framework. Но чтобы понять данную тему, вначале необходимо рассмотреть как в Android реализован механизм межпроцессного взаимодействия (Inter-Process Communication (IPC)). Этот механизм называется Binder IPC, и сегодня мы будем рассматривать его особенности. Все, кому интересно, добро пожаловать!
Читать дальше →

Доступ к таблицам из Си расширений для Postgres

Reading time8 min
Views9.7K

Всем привет!


В этот раз я расскажу не про использование Python или очередной трюк с CSS/HTML и, увы, не про то, как я 5 лет портировал Вангеры, а про один важный аспект написания расширений для замечательной СУБД PostgresSQL.

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

К таблицам из Си можно получить доступ через хорошо описанный но медленный SPI (Server Programming Interface), также есть очень сложный способ, через буферы, а я расскажу про компромиссный вариант. Под катом я постарался дать примеры кода с подробными пояснениями.
Читать дальше →

Проектирование в PostgreSQL документо-ориентированного API (Часть 1)

Reading time5 min
Views18K
Данная статья является переводом, оригинальная статья находится вот здесь, автор Rob Conery.

Postgres, как многие знают, поддерживает JSON как тип хранения данных, а с выходом 9.4, Postgres теперь поддерживает хранение JSON в виде jsonb — бинарного формата.

Это прекрасные новости для тех, кто хочет шагнуть дальше простого «хранения JSON как текста». jsonb теперь поддерживает индексирование с использованием GIN индекса, а также имеет специальный оператор запросов, который позволяет получить преимущества GIN индекса.
Читать дальше →

Андроиды в дельфинарии

Reading time6 min
Views12K
Приветствую всех любителей тех устройств, что помещаются в карман, а также тех, кто держит свой карман шире 7". Сейчас мы займемся искусством программирования кросс-платформенных графических приложений, то есть таких приложений, которые работают на мобильной платформе (смартфоны и планшеты Android) и под Windows (стационарные PC, ноутбуки, нетбуки, планшеты). При этом наши приложения будут графическими, графика основана на OpenGL (OGL) и его мобильном варианте OpenGL ES (GLES). Я использую Embarcadero Delphi XE7. Важная особенность – в этом проекте я не использую платформу FM (FireMonkey), мы будем писать все сами и с нуля, как в старые добрые времена.

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

Android. Автозапуск приложения при загрузке: теория и практика

Reading time7 min
Views99K
Простой поиск на stackoverflow.com показывает, что тема получения сообщения ACTION_BOOT_COMPLETED остается актуальной и по сей день. Как видно, многие новички сталкиваются с проблемой: они не получают в своих приложениях сообщение ACTION_BOOT_COMPLETED. В этой статья я попробую резюмировать данные из официальной документации, опыт многих разработчиков из stackoverflow.com, а также свой опыт. Итак, как же победить этого «коварного врага» под названием «ACTION_BOOT_COMPLETED»?
Читать дальше →

Gradle: 5 полезностей для разработчика

Reading time6 min
Views44K
Привет, Хабр! Настало время, когда можно сказать, что «new build system» Gradle является стандартом отрасли Android-разработки. Инструмент сделан настолько просто и удобно, что большинство разработчиков не испытает трудностей, даже не зная, как он устроен, и какие дополнительные возможности в нём есть — возникающие проблемы легко решаются с помощью 5 минут на StackOverflow, путем копирования «магического кода» в конфигурационные файлы. Возможно, в том числе из-за этого не все разработчики изучают Gradle детально и не знают о многих его полезных возможностях, которые существенно облегчают жизнь.


Сегодня рассмотрим пять таких полезностей

Подготовка библиотек FMOD, Cocos2D-x, OpenAL и OpenSSL для Android-устройств, построенных на платформе Intel

Reading time15 min
Views7.7K
Ни один серьёзный Android-проект не обходится без сторонних библиотек. Иногда их можно найти в пригодном для целевой архитектуры виде, иногда – нет. Тогда библиотеки приходится готовить самостоятельно, например, собирая из исходного кода.



Из этого практического руководства вы узнаете о библиотеках FMOD, Cocos2D-x, OpenAL и OpenSSL для Android-устройств, построенных на платформе x86. Они, в особенности – первые три, пригодятся тем, кто разрабатывает игры и мультимедийные приложения. А именно, мы поговорим об их настройке, компиляции и использовании в Android-приложениях.
Читать дальше →

Сборка Tesseract OCR под MinGW

Reading time5 min
Views21K
tesseract ocr

В одном из своих проектов мне потребовалось распознавание символов и мой выбор остановился на tesseract ocr. На Хабре уже была подобная статья, но на данный момент она не актуальна, во время установки не получилось в точности повторить инструкции автора. В данной статье рассказывается о процессе установке Tesseract OCR под MinGW.
Читать дальше →

Cocos2d-x — разработка простой игры

Reading time12 min
Views115K

1. Вводная часть


В этой статье речь пойдет о разработке прототипа игры под Android/Linux с помощью Cocos2d-x. Cocos2d-x это кросс-платформенный фреймворк для создания двумерных игр и других графических приложений. Он создан на основе cocos2d-iphone, но вместо Objective-C Cocos2d-x использует C++. Приложения могут быть запущены на платформах: iOS, Android, Windows Phone, OS X, Windows, Linux.
Эта статья о разработке приложения под Android/Linux, платформа разработки — Ubuntu.
К сожалению, Cocos IDE существует только под Window и Mac, а под Linux версии не предвидится, но так как я очень люблю Ubuntu и это та платформа, с которой я работаю каждый день, я использую для разработки Clion.
Некоторые части этой статьи — перевод соответствующих частей документации (http://www.cocos2d-x.org/wiki).
Статья ориентирована на тех, кто начинает свое знакомство с Cocos2d-x. В ней я расскажу о том, как создать самое простое приложение со спрайтами, сценами и как работать с акселерометром. Это может быть неким стартом, чтобы в будущем идти дальше, углубляясь в API Cocos2d-x.

2. Требования


Определим необходимый набор инструментов, который нам понадобится.
Ubuntu 14.04 — платформа разработки
Cocos2d-x v3.8.1 — https://cocos2d-x.org/download
CMake 2.8+
JDK 1.6+
Android SDK
Android NDK r9d+
Apache Ant — для сборки Android-сборки
Python 2.7.5
Clion 1.1 — www.jetbrains.com/clion


3. Cocos2d-x


Cocos2d-x появился в 2010 году, это проект с открытым исходным кодом, распространяющейся под лицензией MIT. Cocos2d-x позволяет писать на таких языках как C++, Lua и Javascript. Cocos2d-x быстрый, простой и обладает большими возможностями. В настоящее время много игр, написанных с помощью этого фреймворка, находятся в топе AppStore и Google Play.
«Большие ребята», такие как Zynga, Wooga, Glu, Big Fish Games, Konami используют Cocos2d-x для разработки игр.

Тут я должен сделать маленькое отступление. Дело в том, что Cocos2d-x позволяет использовать C++ для написания кода, и все это будет собираться под Android и Linux. Если использовать Cocos2d-JS, то можно писать на Javascript. Тогда в случае сборки для на Linux/Ubuntu код будет транслироваться в C++, а затем компилироваться. Это влечет много разных проблем (усложняет работу со сторонними библиотеками, например). В случае же web будет выполнятся java-script (кстати, время сборки в этом случае равна нулю, что неплохо).
Если же использовать Cocos2d-x, то под web это не работает, но под Linux и Android код компилируется напрямую. Для Android, конечно же, используется Android NDK.

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

ИТ для пожилых: ПО для планшета, прикладные модули

Reading time5 min
Views5.4K


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

Памятка евангелиста PostgreSQL: репликанты против репликации

Reading time14 min
Views37K


В продолжение серии публикаций «Памятка евангелиста PostgreSQL...» (1, 2) дорогая редакция снова выходит на связь, на этот раз с обещанным обзором механизмов репликации в PostgreSQL и MySQL. Главным поводом для написания послужила частая критика репликации MySQL. Как это часто бывает, типичная критика представляет из себя забористую смесь из правды, полуправды и евангелизма. Всё это многократно реплицируется разными людьми без особых попыток разобраться в услышанном. А поскольку это довольно обширная тема, я решил вынести разбор в отдельную публикацию.
Читать дальше →

Неочевидные особенности сортировки товара и «танец реальности»

Reading time9 min
Views30K


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

Самый простой способ – задавать порядок вручную. В физических магазинах на полках делается именно так, и это называется «выкладка». У нас её делают продавцы по планограммам под каждую точку (это входит в обучение), а в тех же больших продуктовых – специальные чуваки-мерчендайзеры, которые следят, чтобы всё было ок. В Интернете, конечно, хочется сделать так же, но метод хорош до 50 позиций.

На другой стороне шкалы методы больших данных, когда все данные о вас начиная от сборки браузера, типа девайса (точнее, его цены) и разрешения экрана, плюс все данные профиля и оценка ваших действий на сайте ведут к оптимальному результату. Самый простой способ использования таких данных – за первые 20-30 секунд нахождения на сайте строить ваш профиль и сравнивать с профилями таких же людей. И предлагать вам в итоге не самые дешёвые квартиры и отели, например, а начинать с тех цен, которые для вас будут приемлемыми. Вы наверняка знаете эту сортировку, которую почему-то подают в прессе под соусом «самой удобной для клиента».

По моим ощущениям, самая удобная для нашего покупателя – это такая, которая понятна и поддаётся контролю.
Читать дальше →

Использование RxJs для связывания компонентов приложения

Reading time6 min
Views29K

Способы «общения» компонентов


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

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

image


Это чем-то напоминает WI-FI в кафе, когда все могут обмениваться сообщениями со всеми, но при этом есть роутер (диспетчер), который обеспечивает существование «эфира» и отдает сообщения только тем, кому они адресованы.

Такая организация позволяет, например, «бесплатно» получить слабое связывание компонентов. Недостаток ее в том, что при росте числа компонентов и соответственно числа событий становится сложно уследить за именами событий и за тем, кому какие события нужны для правильной работы. Появляются пространства имен и имена событий из чего-то типа «Событие1» превращаются в «Состояние_приложения1.Компонент2.Событие1». И что совсем невозможно делать при такой организации это компоновать события. Например требование «сделай что-то когда событие Б возникнет после двух событий A» выливается в тонну локальных переменных, хранящих последние данные из событий и счетчики самих событий.
Читать дальше →

Information

Rating
2,694-th
Registered
Activity

Specialization

Specialist
Lead