Pull to refresh
7
0
Виталий Бендик @bendikv

Head of Android @ Gradient

Send message

Работа с датчиками в Android, или сервис для записи показаний с акселерометра

Reading time5 min
Views11K

Введение


Год назад, на хабре публиковалась статья «Собираем показания датчиков с Android смартфона», где рассматривался способ получения данных с акселерометра (кстати говоря, есть пост более старый, в котором рассказывается все то же самое). Недавно передо мной была поставлена похожая задача. Необходимо было создать приложение (решил назвать его «Sensor Logger»), записывающее показания с акселерометра в файл в фоновом режиме. В данной статье постараюсь показать, как можно использовать сервисы и намерения, как работать с текстовыми файлами, а также каким образом отправлять данные из сервиса в Activity.
Читать дальше →
Total votes 12: ↑7 and ↓5+2
Comments1

SQLite: создание «горячей» резервной копии данных

Reading time7 min
Views21K
В SQLite имеется механизм создания резервной копии базы «на лету». Многие разработчики об этом не знают, почему-то. Механизм этот примитивный, но подходит для многих ситуаций. В этой статье мы хотели бы обсудить эту самую встроенную возможность резервирования, а также предложить архитектуру для собственного механизма бэкапа. Ну или хотя бы дать направление, в котором двигаться, если нужно устроить сложную репликацию данных.

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

HoloEverywhere 1.6.8

Reading time6 min
Views11K
Logo
Всем единообразия, или доброго времени суток!
Листая тут хабр наткнулся на статейку Подключение шрифтов в своем проекте автора mcavalon, думал подчерпнуть чего-нить интересное… Но увидев очередной TextView.setTypeface how-to, зевнул и пошел читать другую статью (@rus1f1kat0r, привет кстати :)).

Так вот, несколько минут назад (на момент написания этих строк это были еще минуты, а не часы, совершенно непреднамеренно меня выдернули девушки) я выпустил HoloEverywhere 1.6.8, основной фичей этого релиза является продвинутый FontLoader, ну и еще несколько плюшек, как всегда.
Читать дальше →
Total votes 49: ↑40 and ↓9+31
Comments3

Супер простой iOS JSON mapper

Reading time4 min
Views9.6K
Каждый, кто хотя бы раз писал клиент-серверное приложение под iOS, так или иначе сталкивался с маппингом json/xml/прочее в объекты. Иногда это бывает сложно, иногда вообще хочется работать просто со словарями, есть уже много готовых решений типа RestKit, который вообще являет собой универсальный комбайн на все случаи жизни, так зачем же писать очередной велосипед?

Причин может быть много, несколько из них, которые и сподвигли меня написать свой мини-маппер, это:

  • не хочется разбираться с чем-то большим и сложным;
  • мне нужен только маппер, без дополнительных плюшек типа работы с сетью или интеграции с Core Data;
  • если фреймворк работает не так как я хочу, часто разобраться и поправить в нем что-то становится реальной головной болью, особенно если стадия проекта далеко не начальная и отказаться от фреймворка проблемно;
  • мне не нужен в проекте на 3 экрана фреймворк еще на 50 классов и 4 МБ весом;
  • свое всегда роднее.

Итак понеслась
Total votes 13: ↑8 and ↓5+3
Comments12

Сетевое кеширование в iOS. NSURLCache

Reading time5 min
Views21K
Данная тема важна при разработке любого приложения, взаимодействующего с сетью. Здесь грамотное использование возможностей системы может значительно улучшить взаимодействие пользователя с программой.

NSURLCache — это комплексное решение для кеширования сетевых запросов в оперативной памяти или на диске. В соответствии с документацией Apple, любой запрос с использованием NSURLConnection будет «пропущен» через NSURLCache.

Кеширование уменьшает количество необходимых обращений к сети, улучшает впечатление от работы с программой во время полного отсутствия интернета или проблем с сетевым соединением.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments3

Блоки в Objective-C

Reading time1 min
Views12K
В этом небольшом 15-минутном видео Юра Digal Буянов (ведущий iOS-разработчик e-Legion) расскажет о тонкостях работы с блоками в Objective-C.



Мы решили сделать целый ряд коротких видео о разработке (не только мобильной), дизайне и маркетинге. Чтобы не пропустить выход новых материалов, вы можете подписаться на Хабра-блог или на youtube-канал.

Принимаются советы, рекомендации, а также заявки на интересующие темы, которые можно раскрыть в следующих видео.
Total votes 52: ↑44 and ↓8+36
Comments4

EasyMapping, или Путешествие по JSON'у

Reading time5 min
Views19K
Computer programs are the most complex things that humans make. It is also the nature of software to be extensively modified over its productive life. If we can read and understand it, then we can hope to modify and improve it.

Douglas Crockford, автор спецификации JSON


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

Есть много способов превращения JSON в Objective-C обьекты, однако многие из них имеют свои недостатки, которые мешают с ними работать. Есть известный и любимый многими RestKit, однако он, к сожалению, эффективно работает только при наличии идеального REST API. Шаг в сторону — и вы будете забивать гвозди микроскопом, не понимая, зачем нужно писать такие сложные конструкции для достаточно простых вещей. Есть решение от разработчиков GitHub — Mantle, однако с ним вы будете вынуждены наследоваться от базового класса Mantle и постоянно использовать NSValueTransformer — не самую популярную технологию в iOS/Mac OS разработке.

Я хочу рассказать о фреймворке, который недавно нашелся на просторах GitHub, и который позволяет достаточно просто и красиво преобразовывать JSON в Objective-C обьекты — EasyMapping.

Если заинтересовались, добро пожаловать под кат!
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments5

Создаем Shazam на Java

Reading time6 min
Views42K


Пару недель назад, я наткнулся на эту статью How Shazam Works
Мне стало интересно, как же работают такие программы как Shazam… Что еще более важно, насколько тяжело написать что-либо похожее в Java?

О Shazam

Если кто-то не знает, Shazam это приложение с помощью которого вы можете анализировать/подбирать музыку. Установив ее на свой телефон, и поднеся микрофон к какому-либо источнику музыки на 20-30 секунд, приложение определит, что это за песня.

При первом использовании у меня возникло волшебное чувство. «Как оно это сделало!?» И даже сегодня, когда я уже пользовался им много раз, это чувство меня не покидает.
Разве не будет классно, если бы мы смогли написать что-то сами, что вызывало бы такие же чувства? Это и было моей целью в прошлый уикенд.
Читать дальше →
Total votes 92: ↑80 and ↓12+68
Comments23

Пуленепробиваемый Node.js

Reading time2 min
Views27K
Проблемы индейцев
Одним из остававшихся до недавнего времени недостатком Node.js, который отпугивал бекенд-разработчиков от использования Node.js, был тот факт, что непойманное исключение в потоке рушило воркера, и все клиенты, которые ждали от него ответа, не получали ничего.

tl;dr Eсть новое API для асинхронного try\catch. Из статьи можно скопипастить пример и поиграться.
Читать дальше →
Total votes 56: ↑47 and ↓9+38
Comments21

Поддержка USB в KolibriOS: что внутри? Часть 1: общая схема

Reading time9 min
Views36K
Архитектура USB содержит несколько уровней. На самом низком уровне специально обученное железо, называемое хост-контроллером (host controller), общается с USB-устройством специальными сигналами. Сигналы кодируют биты, биты складываются в пакеты, пакеты образуют транзакции, транзакции составляют передачи (transfers).

Я рассказываю о программной поддержке USB, поэтому уровни ниже передач почти неинтересны: за них отвечает хост-контроллер. Зато важно, какой интерфейс представляет хост-контроллер софту. Сейчас распространены три интерфейса, и постепенно распространяется четвёртый:
Аббр. Название интерфейса Версия Код поддержки контроллера в KolibriOS
UHCI Universal Host Controller Interface USB 1.1 kernel/trunk/bus/usb/uhci.inc
OHCI Open Host Controller Interface USB 1.1 kernel/trunk/bus/usb/ohci.inc
EHCI Enhanced Host Controller Interface USB 2.0 kernel/trunk/bus/usb/ehci.inc
XHCI eXtensible Host Controller Interface (новый) USB 3.0 В KolibriOS ещё не поддерживается
На этом же уровне взаимодействия с контроллерами находятся файлы kernel/trunk/bus/usb/hccommon.inc, где реализованы некоторые функции, общие для всех контроллеров, и kernel/trunk/bus/usb/init.inc, который запускает всю подсистему. Впрочем, не торопитесь пока лезть в код — во-первых, я ещё не рассказала про то, чего же ожидают от него более высокие уровни, а во-вторых, после демонстрации общей схемы я вернусь к отдельным компонентам с подробностями.
И что же на более высоких уровнях?
Total votes 167: ↑164 and ↓3+161
Comments57

Механизм атомарного коммита в SQLite

Reading time23 min
Views29K
Эта статья — частичный перевод одной интересной статьи с sqlite.org, в которой подробно рассматривается реализация транзакций в SQLite. На самом деле я очень редко работаю с SQLite, но тем не менее мне очень понравилось это чтиво. Поэтому если хотите просто развить кругозор — будет интересно почитать. Первые две секции не включены в перевод, так как там нет ничего интересного, да и мне лень их набивать (пост и так огромный).

3.0 Однофайловый коммит

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

3.1 Начальное состояние


Состояние системы, когда соединение с БД только что было поднято, поверхностно изображено на рисунке справа. Справа показана информация, которая хранится на энерго-независимом носителе. Каждый прямоугольник — это сектор. Синий цвет говорит о том, что этот сектор содержит оригинальные данные. Посередине изображён дисковый кеш операционной системы. В самом начале нашего примера кеш холодный, это изображено белым цветом. На левой части рисунка — содержимое оперативной памяти процесса, который использует SQLite. Соединение с БД только что было открыто, и никакой информации прочитано не было.

Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments5

Изучаем принципы взаимодействия Ubuntu Touch и Android

Reading time10 min
Views53K

Привет, хабр.

Пару месяцев назад я занимался портированием Ubuntu Touch на платформу Allwinner A10,
в процессе делал заметки себе на память. Сейчас, на мой взгляд, они всё ещё актуальны, пока Ubuntu Touch окончательно не переехала на свой графический сервер Mir и так далее.

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

Стиль изложения далёк от технического, но если вы не против, то
приглашаю под кат.
Читать дальше →
Total votes 91: ↑87 and ↓4+83
Comments34

Правильно освобождаем ресурсы в Java

Reading time4 min
Views162K
Неправильное освобождение ресурсов — одна из наиболее часто допускаемых ошибок среди Java-программистов. Под ресурсом в данной статье я буду подразумевать всё, что реализует интерфейс java.io.Closeable. Итак, сразу к делу.

Будем рассматривать на примере OutputStream. Задача: получить на вход OutputStream, сделать некоторую полезную работу с ним, закрыть OutputStream.
Читать дальше →
Total votes 68: ↑59 and ↓9+50
Comments82

Ежедневная работа с Git

Reading time40 min
Views874K
Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
  • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
  • будет ли менеджер и заказчик удовлетворён этим процессом?
  • будет ли легко работать разработчикам?
  • смогут ли новички быстро включиться в процесс?
  • можно ли процесс относительно легко и быстро изменить?


Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

Далее очень много букв случайным образом превратились в пост.
Total votes 200: ↑194 and ↓6+188
Comments44

Рисуем четкую иконку дома в 32x32 (аля FatCow)

Reading time4 min
Views37K

Как правильно нарисовать иконку (размер 32х32, часть I)


Хочу предложить вашему вниманию урок по созданию иконок размером 32х32 в программе Adobe Photoshop. Данный урок позволит научиться рисовать иконки не прилагая много усилий – в итоге вы поймете что рисование иконок для интерфейсов не такая уж и сложная задача, нужно лишь запастись терпением, и знать представление о работе в программе Adobe Photoshop.
40.png 39.png
Итак, начнем! В первую очередь, чтобы иконки не выбивались из размера и были похожи по стилю, нужно сделать шаблон, на основе которого мы будем рисовать серию иконок.
Читать дальше →
Total votes 96: ↑63 and ↓33+30
Comments33

Новые функции Google для разработчиков: игровые API, перевод и тестирование

Reading time2 min
Views14K
Сегодня на конференции Google I/O в Сан-Франциско Google объявил о целом ряде новых функций для разработчиков.

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

При этом игровые сервисы Google Play будут поддерживаться не только в приложениях на Android, но и для iOS и веб, что делает их по настоящему кросс-платформенными.

Новые API будут доступны для всех устройств на Android начиная с версии 2.2 (Froyo) и на них уже можно подписаться через консоль разработчика.

Читать дальше →
Total votes 35: ↑33 and ↓2+31
Comments15

Определение расстояния между географическими точками в MySQL

Reading time3 min
Views67K
При разработке современного сайта часто возникает необходимость реализовать функционал вывода близлежащих географических точек. Самым оптимальным способом решения этой задачи является перекладывание работы по реализации определения точек на плечи MySQL. Если конкретней, то нам будут нужны возможности пространственных расширений MySQL (до версии 5.0.16 эти расширения были доступны только для MyISAM, более поздние версии MySQL поддерживают работу пространственных расширений с InnoDB, NDB, BDB и ARCHIVE).

Расстояние между точками будет вычисляться по формуле гаверсинусов. Формула позволяет получать расстояние между точками с очень низкой погрешностью (величина погрешности прямо пропорциональна расстоянию между точками, и не превышает 10-20 километров при вычислении очень больших расстояний, например между штаб-квартирой Google в Калифорнии (37.422045, -122.084347) и оперным театром в Сиднее, Австралия (-33.856553, 151.214696)).

Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments41

Android NDK: OpenSL ES

Reading time9 min
Views24K
Здравствуйте, уважемые хабражители!
Недавно, читая хабр, я увидел статью об Android NDK и OpenAL. А в комментариях был задан вопрос о OpenSL ES. Тогда у меня и родилась мысль написать статью об этой библиотеке. Я занимался этой темой, когда мне понадобилось добавить звуки и музыку в игру под Android, написанную на C++, под NDK. Статья не претендует на полноту, здесь будут лишь основы.

Содержание:
  1. Краткое описание структур OpenSL ES
  2. Инициализация механизма библиотеки и создание объекта для работы с динамиками
  3. Проигрывание PCM(wav)
  4. Проигрывание MP3, OGG
  5. Заключение

Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments15

Как стать настоящим аналитиком? Часть 2. Выявляем требования

Reading time4 min
Views78K
Доброе время суток, дорогие хабравчане! Данная статья является продолжением топика, и в ней хотелось бы начать обсуждение стадии создания требований. Если вы успешно справитесь с этой стадией процесса, вы получите отличный продукт, счастливых заказчиков и удовлетворенных разработчиков. В противном случае вам грозит непонимание, разочарование и разногласия.

Стадию создания или разработки требований условно можно разделить на 4 этапа.
Читать дальше →
Total votes 25: ↑20 and ↓5+15
Comments29

Быстрый способ создать установщик для Java программы

Reading time4 min
Views17K
Вам никогда не надо было быстро создать установщик для своего Java-приложения, но не хотелось тратить на это кучу времени, создавая свой собственный? Возможно, вы удивитесь, но в стандартной поставке JDK7 такой инструмент уже присутствует.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments12
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity