Читать дальше →
Дмитрий Романенко @WraithOWread-only
User
10 советов по использованию ExecutorService
13 min
159KПредлагаю читателям «Хабрахабра» перевод публикации «ExecutorService — 10 tips and tricks».

Абстракция ExecutorService была представлена еще в Java 5. На дворе шел 2004 год… На секунду – сейчас Java 5 и 6 больше не поддерживаются и Java 7 готовится пополнить список. А многие Java-программисты по-прежнему не в полной мере понимают как работает ExecutorService. В вашем распоряжении множество источников, но сейчас я хотел бы рассказать о малоизвестных тонкостях и практиках по работе с ней.

Абстракция ExecutorService была представлена еще в Java 5. На дворе шел 2004 год… На секунду – сейчас Java 5 и 6 больше не поддерживаются и Java 7 готовится пополнить список. А многие Java-программисты по-прежнему не в полной мере понимают как работает ExecutorService. В вашем распоряжении множество источников, но сейчас я хотел бы рассказать о малоизвестных тонкостях и практиках по работе с ней.
+19
Android разработка — Gradle JarJar plugin
2 min
11K
А именно: при использовании библиотеки GSON для сериализации/десериализации в/из JSON на некоторых устройствах от HTC в рантайме мы получали креш. Причина такого поведения в том, что некоторые устройства от HTC имеют в своей прошивке свою версию GSON, которая более старая чем та которую использовали мы в своих проектах. А андроидовский java class loader при загрузке класса в память предпочитает «системную» версию, вместо версии в проекте.
Кроме того на некоторых устройствах существует аналогичная проблема с OkHttp — тоже довольно популярной библиотекой в мире андроид разработки.
Для решения проблемы необходимо переупаковать GSON (или любую другую библиотеку) с помощью утилиты JarJar. После переупаковки артефакт будет иметь новую структуру пакетов, которую необходимо использовать в директивах импорта в своем проекте. Для этого нужно подключить переупакованный jar к своему проекту вместо исходного.
Нам захотелось автоматизировать эту задачу и в итоге появился Gradle JarJar Plugin, доступный в Maven Central. Плагин позволяет указать jar-библиотеки и правила для переупаковки их с помощью JarJar.
+12
Material Design и поиск на примере приложения-справочника
8 min
29KВведение
Несколько лет назад я писал статью на Хабр о приложении-справочнике по математике для Android, которое стало моим первым опытом в разработке для GooglePlay. Сегодня, оглядываясь назад на свой прошлый хабрапост и прошлую версию приложения, мне становится страшно (чтобы содрогнуться достаточно взглянуть на первый скриншот ниже). За прошедшие несколько лет многое поменялось: AndroidMarket стал называться GooglePlay с новыми правилами и прочим, выходили новые версии ОС, появилась некая общая google-концепция к дизайну приложений material-design, появились новые среды разработки, да и Хабр изменился.
В этом посте речь пойдёт о том, как сделать свое приложение материальным, добавить в него поиск, а также некоторые размышления о том какую рекламу использовать.

+17
Appodeal — бесплатный оптимизатор доходов от рекламы для мобильных разработчиков
4 min
34K
Этим постом я бы хотел официально представиться и вкратце познакомить вас с нашим проектом. Меня зовут Павел Голубев, с 2009 года я работаю в сфере разработки и публикации мобильных приложений. Наша команда в свое время запустила SaaS-сервис Columbis для турагентств, позволяющий автоматизировать их деятельность. После этого я переехал в Соединенные Штаты, Сан-Франциско, и уже тут продолжил работу в сфере мобильной рекламы. В определенный момент у нас возникла потребность в платформе, которая позволила бы увеличить доход от рекламы в наших приложениях. На поиски подобного инструмента оптимизации трафика мы потратили несколько месяцев, после чего приняли решение сделать его сами. В итоге, разработка для внутренних нужд переросла в самостоятельный проект — Appodeal, в блоге которого и размещена данная публикация.
Appodeal сейчас — бесплатный оптимизатор доходов от мобильной рекламы. Проект наследовал первоначальную задумку, когда разрабатывался как внутренний инструмент: он ориентирован на разработчика мобильных приложений, а не на рекламодателя. Перед каждым создателем приложений рано или поздно встает вопрос монетизации и, если выбор делается в пользу размещения рекламы, то он сталкивается с рядом вопросов и трудностей:
- какую рекламную сеть выбрать;
- как к ней подключиться;
- насколько высокая заполняемость (fill rate) у этой сети;
- насколько высокий eCPM для региона вашей аудитории в конкретной сети;
- какой тип оплаты подходит для вас (CPI/CPM/CPC);
- есть ли плагин для фреймворка, в котором вы ведете разработку;
- как в конечном итоге вывести свои деньги.
+18
LeakCanary — помощник в поиске утечек памяти
3 min
33KTranslation
Никому не нравятся креши с OutOfMemoryError
Работая над Square Register, мы рисуем подпись клиента используя битмап-кеш. Поскольку этот битмап размером с экран устройства, у нас было очень много OutOfMemory крешей во время создания его.

Мы пробовали несколько подходов ни один из которых не решил проблему:
- Использовали Bitmap.Config.ALPHA_8
- Ловили OutOfMemoryError, вызывали сборку мусора и пробовали снова (подглядели в GCUtils),
- Мы не рассматривали вариант с размещением битмапов вне кучи Java. К счастью Fresco еще не существовало,
+28
Учим Python качественно
4 min
1.4MЗдравствуйте всем!
Решил поделиться методом обучения сего мощного, но в одно и тоже время лёгкого языка программирования. Он действительно лёгкий. Вам не надо будет запоминать и вводить лишних символов, которые Вы можете встретить в Си-подобных языках.
Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП), мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?
Решил поделиться методом обучения сего мощного, но в одно и тоже время лёгкого языка программирования. Он действительно лёгкий. Вам не надо будет запоминать и вводить лишних символов, которые Вы можете встретить в Си-подобных языках.
Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП), мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?
+32
Делаем скриншоты правильно: практические советы
8 min
190KTutorial
Устройство для снимка экрана на первых компьютерах (Command-Shift-3)
Если вы когда-либо делали хелп или мануал для своего приложения, наверняка вы отметили, как неожиданно много времени и сил занимает создание скриншотов.
Ведь кажется, что скриншот — это “секунда работы, Alt+PrintScreen и Ctrl+V!”. Некоторые клиенты удивляются, когда слышат, что скриншот в мануале может стоить и $2 и даже $5.
В этой статье я расскажу, как правильно делать скриншоты, почему это не просто “два клика” и какие подводные камни встречаются на пути неопытного скриншотера. Рассматривайте ее как чеклист или список практических советов для тех, кто документирует ПО. Надеюсь, это поможет вам избежать разочарований и порадовать юзеров красочными понятными картинками.
+57
Android. Пару слов об MVP + rxJava
5 min
75K
Работая с Android часто можно видеть, как весь функциональный код помещается в методы жизненного цикла activity/fragment. В общем-то такой подход имеет некоторое обоснование — «методы жизненного цикла» всего лишь хэндлеры, обрабатывающие этапы создания компонента системой и специально предназначенные для наполнения их кодом. Добавив сюда то, что каркас UI описывается через xml файлы, мы уже получаем базовое разделение логики и интерфейса. Однако из-за не совсем «изящной» структуры жизненного цикла, его зависимости от множества флагов запуска, и различной (хоть и похожей) структуры для разных компонентов, эффективно воспользоваться подобным разделением не всегда бывает возможно, что в итоге выливается в написании всего кода в onCreate().
+22
Книги по Swift
1 min
21KДобрый день, Хабровчане!
Прошло уже достаточно времени, но книг на русском языке про Свифт так и не появилось.
Издательству «Питер» интересно ваше мнение о том какой должна быть эта книга. Примите участие в опросе и помогите нам выбрать идеальную книгу.
1. Книга для начинающих. Например такая
Swift for Beginners: Develop and Design

Прошло уже достаточно времени, но книг на русском языке про Свифт так и не появилось.
Издательству «Питер» интересно ваше мнение о том какой должна быть эта книга. Примите участие в опросе и помогите нам выбрать идеальную книгу.
1. Книга для начинающих. Например такая
Swift for Beginners: Develop and Design

+13
Material Design: на Луну и обратно
11 min
391KTutorial
“Это унылое диалоговое окно действительно нужно?”

В этой статье я изложил главные принципы Material Design и дал советы по их воплощению. Текст написан по следам мастер-класса для разработчиков, который мы, Роботы, устраивали совместно с российским офисом Google (Think Mobile).

Когда-то все продукты Google выглядели по-разному плохо. Даже один продукт на разных платформах выглядел неконсистентно.
Все стало меняться в 2011 году, когда в Google начали усиленно работать над унификацией визуальной части экосистемы своих продуктов и назвали все это Project Kennedy.
При чем тут Кеннеди?
Легенда такова: президент Кеннеди инициировал программу полёта человека на Луну (если верить, что этот полёт когда-либо был). А большой начальник в Google Ларри Пейдж исповедует принцип, что продукты нет смысла улучшать на 10% — они должны быть в 10 раз лучше, чем у конкурентов. Если уж запускать продукт, то сразу на Луну. Вот и здесь было решено круто всё переделать.
+124
11 крутых сайтов для iOS разработчиков
3 min
41KTranslation

Чтобы оставаться профессионалом в разработке iOS приложений, нужно постоянно учиться у других и узнавать о новейших инструментах и приемах. Кроме сайта Apple с документацией, существуют несколько ресурсов с ценными статьями и уроками, которые помогут нам стабильно развиваться. О них и пойдет речь в этой статье.
+12
Интерфейсы в реальном мире (ещё примеры)
10 min
140KОбычный кран с горячей и холодной водой очень жесток к пользователю. В идеале его интерфейс решает три основные задачи:
Вот тут вы можете узнать пару своих знакомых кранов:

А это — очень страшный автомобильный диод, по нему только вперёд:

Итак, если вам интересно продолжение про интерфейсы в реальном мире – заходите в пост. Осторожно, трафик.
- Позволяет выбрать напор воды.
- Позволяет выбрать температуру воды.
- И защищает систему от гидравлического удара.
Вот тут вы можете узнать пару своих знакомых кранов:

А это — очень страшный автомобильный диод, по нему только вперёд:

Итак, если вам интересно продолжение про интерфейсы в реальном мире – заходите в пост. Осторожно, трафик.
+100
Архитектурный дизайн мобильных приложений
9 min
98KПризнак плохого дизайна №1:
Наличие объекта-«бога» с именем, содержащим «Manager», «Processor» или «API»

Ведущий iOS-разработчик Redmadrobot Егор BepTep Тафланиди — о том, как добиться стройного архитектурного дизайна мобильного приложения, используя классические шаблоны проектирования и логическое разделение исходного кода на модули.
Наличие объекта-«бога» с именем, содержащим «Manager», «Processor» или «API»

Ведущий iOS-разработчик Redmadrobot Егор BepTep Тафланиди — о том, как добиться стройного архитектурного дизайна мобильного приложения, используя классические шаблоны проектирования и логическое разделение исходного кода на модули.
+23
Анонс конференции Mobius 2015: доклады по iOS, Android и Mobile Security
4 min
6.8KВсем привет!
3 апреля 2015 года в Санкт-Петербурге пройдёт конференция Mobius для программистов, разрабатывающих ПО под Android, iOS, Windows Phone и другие мобильные платформы.

Доклады конференции будут сугубо ТЕХНИЧЕСКИМИ. В программе:
На конференции НЕ БУДЕТ:
Из похожих конференций в России есть только московская конференция #MBLTDev от компании e-Legion и… и всё. Все остальные конференции занимаются играми, продвижениями, трафиками и другими не-девелоперскими делами. Так что приятно, что в этом поле появился хоть кто-то, кроме нас :) Потому что на других конференциях, конечно, попадаются девелоперские доклады, а иногда и целые секции, но этого, к сожалению, все равно мало. Особенно на фоне роста числа технических мобильных конференций в Европе и США.
3 апреля 2015 года в Санкт-Петербурге пройдёт конференция Mobius для программистов, разрабатывающих ПО под Android, iOS, Windows Phone и другие мобильные платформы.

Доклады конференции будут сугубо ТЕХНИЧЕСКИМИ. В программе:
- более 20 технических докладов от экспертов в области мобильной разработки;
- Мастерклассы от гуру программирования под iOS и Android;
- Зоны свободного общения — возможность неформального контакта с участниками.
На конференции НЕ БУДЕТ:
- докладов про маркетинг и продвижение мобильных приложений;
- презентаций про инвестиции, стартапы, бизнес-модели, монетизацию и т.п.;
- лекций про внедрение Agile и других методологий разработки;
- коворкингов, хакатонов и прочих всем надоевших баззворд-активностей.
Из похожих конференций в России есть только московская конференция #MBLTDev от компании e-Legion и… и всё. Все остальные конференции занимаются играми, продвижениями, трафиками и другими не-девелоперскими делами. Так что приятно, что в этом поле появился хоть кто-то, кроме нас :) Потому что на других конференциях, конечно, попадаются девелоперские доклады, а иногда и целые секции, но этого, к сожалению, все равно мало. Особенно на фоне роста числа технических мобильных конференций в Европе и США.
+16
Печать и воспроизведение звука на бумаге
3 min
103KМожно ли закодировать звук в виде изображения, которое считывается камерой и проигрывается в реальном времени?
На ум сразу приходит QR-код или некие его аналоги. В такой код можно записать ссылку на mp3, или даже совсем маленький звуковой файл. Но в первом случае требуется выход в сеть, а во втором — большая плотность кода и повышенные требования к качеству изображения. Кроме того, ни тот ни другой способ не обеспечит мгновенное воспроизведение.
Что, если кодировать звук не в цифровом, а в аналоговом формате? То есть, допустить возможность больших потерь информации с сохранением основных «очертаний» звукового послания. Например, такие потери возникнут при плохом освещении, плохой камере, маленькой картинке, мятой или рваной бумаге с кодом. Пусть со страшными артефактами, но картинка должна звучать.

На ум сразу приходит QR-код или некие его аналоги. В такой код можно записать ссылку на mp3, или даже совсем маленький звуковой файл. Но в первом случае требуется выход в сеть, а во втором — большая плотность кода и повышенные требования к качеству изображения. Кроме того, ни тот ни другой способ не обеспечит мгновенное воспроизведение.
Что, если кодировать звук не в цифровом, а в аналоговом формате? То есть, допустить возможность больших потерь информации с сохранением основных «очертаний» звукового послания. Например, такие потери возникнут при плохом освещении, плохой камере, маленькой картинке, мятой или рваной бумаге с кодом. Пусть со страшными артефактами, но картинка должна звучать.

+201
Выбираем нано-квадрокоптер за 20$
3 min
62KАктуально на февраль 2016
Прошёл ровно год, после того, как я написал пост "Прощай квадрокоптер или будьте осторожны с летательными аппаратами". Напомню, что тогда мой DJI Phantom, вместе с подвесом и GoPro, улетел в неизвестном мне направлении, а его поиски ничего не дали. Какого же было моё удивление, когда перед новым годом мне пришло сообщение:
«Привет Юра и Надя! Вчера я нашел ваш хеликоптер. Случайно увидел в серванте у одного местного. Зашел в дом к нему по делам. Смотрю на шкафу штучка интересная. Вряд ли полезная в этой семье. Спросил: Нашел? Да, нашел. На поленнице лежало. В мае нашел».
Письмо было от организатора гонок на собачьих упряжках, которые я тогда ездил снимать. И радости моей не было предела, даже новый год мы встретили в компании с этим человеком, проехав на машине 1600 км до самого сердца глубинки Карелии.
Состояние коптера — это большая тема для отдельной статьи, а пока скажу лишь, что основные элементы отлично функцонируют и коптер уже летает. Однако я решил не повторять своих ошибок и учиться пилотированию, начиная с более бюджетных моделей, а именно с нано-квадрокоптеров стоимостью ~20$, о них и пойдёт речь.

DJI Phantom в сравнении с нано-коптерами SYMA X12 и Cheerson CX-10
Прошёл ровно год, после того, как я написал пост "Прощай квадрокоптер или будьте осторожны с летательными аппаратами". Напомню, что тогда мой DJI Phantom, вместе с подвесом и GoPro, улетел в неизвестном мне направлении, а его поиски ничего не дали. Какого же было моё удивление, когда перед новым годом мне пришло сообщение:
«Привет Юра и Надя! Вчера я нашел ваш хеликоптер. Случайно увидел в серванте у одного местного. Зашел в дом к нему по делам. Смотрю на шкафу штучка интересная. Вряд ли полезная в этой семье. Спросил: Нашел? Да, нашел. На поленнице лежало. В мае нашел».
Письмо было от организатора гонок на собачьих упряжках, которые я тогда ездил снимать. И радости моей не было предела, даже новый год мы встретили в компании с этим человеком, проехав на машине 1600 км до самого сердца глубинки Карелии.
Состояние коптера — это большая тема для отдельной статьи, а пока скажу лишь, что основные элементы отлично функцонируют и коптер уже летает. Однако я решил не повторять своих ошибок и учиться пилотированию, начиная с более бюджетных моделей, а именно с нано-квадрокоптеров стоимостью ~20$, о них и пойдёт речь.

DJI Phantom в сравнении с нано-коптерами SYMA X12 и Cheerson CX-10
+31
Пять лучших VPN-сервисов
3 min
536KTranslation

В свете событий, связанных с ограничением доступа в интернет, цензурой и блокировками сайтов, считаю нужным представить вам перевод сравнительной статьи о VPN-сервисах с ресурса LifeHacker.
Private Internet Access
Это наш любимый сервис, а судя по количеству наград, которые они собрали – и ваш тоже. PIA обеспечивает не только шифрование трафика, но и анонимизацию вкупе с отвязкой от регионального расположения. Вы можете выбрать выходной сервер из списка почти в 1000 штук (в 10 разных странах). PIA не хранит логи, не запрещает никакие протоколы и IP-адреса, и не хранит у себя информации о действиях пользователей. Также они поддерживают несколько методов авторизации, практически все операционки (мобильные и десктопные), а стоимость услуг начинается от $7 в месяц. Возможно подключение до пяти различных устройств.
+26
Лучший способ изучить Rails
5 min
200KДоброго времени суток!
Когда-то я хотел познакомиться с Rails поближе, но не знал с чего начать, пока мне на глаза не попалась эта статья. Далее вы увидите перевод, смешанный с собственным опытом и свойственными мне лексическими и фразеологическими оборотами. Итак, поехали.
У меня за спиной огромный опыт работы с PHP, но сейчас я работаю Rails разработчиком. Огромную сложность для большинства людей, которые пытаются освоить что-то новое — это сам процесс обучения. Когда вы владеете каким-либо языком или фреймворком и знаете его вдоль и поперёк, переход на что-то новое не представляется необходимым.
Однако, изучение Ruby on Rails является достаточно простым занятием. Это невероятно мощный фреймворк, который имеет огромное сообщество, продвигающее его вперёд. Итак, у нас возникает вопрос: какой способ изучить Rails является лучшим? Вот он — план занятий.
Предисловие
Когда-то я хотел познакомиться с Rails поближе, но не знал с чего начать, пока мне на глаза не попалась эта статья. Далее вы увидите перевод, смешанный с собственным опытом и свойственными мне лексическими и фразеологическими оборотами. Итак, поехали.
Введение
У меня за спиной огромный опыт работы с PHP, но сейчас я работаю Rails разработчиком. Огромную сложность для большинства людей, которые пытаются освоить что-то новое — это сам процесс обучения. Когда вы владеете каким-либо языком или фреймворком и знаете его вдоль и поперёк, переход на что-то новое не представляется необходимым.
Однако, изучение Ruby on Rails является достаточно простым занятием. Это невероятно мощный фреймворк, который имеет огромное сообщество, продвигающее его вперёд. Итак, у нас возникает вопрос: какой способ изучить Rails является лучшим? Вот он — план занятий.
+55
Всё о версиях Windows 8.1 и о том, как легально загрузить последний образ без подписки
6 min
773KХочу поделиться в одной заметке важной, на мой взгляд, информацией о версионности образов Windows 8.1, и о том, как любой желающий может совершенно легально загрузить ту языковую версию и издание, которые ему требуется. С учётом того, что после выхода Windows 8.1 образы пересобирались минимум пять раз, вопрос версионности становится интересным для администраторов и энтузиастов.
Недавно я писал о том, как можно совершенно легально загрузить самый последний Microsoft Office с сайта Microsoft — как корпоративную версию, так и коробочную Retail — любые языки и продукты, со всеми интегрированными обновлениями. Сегодня я расскажу, как сделать то же самое и с операционной системой — средствами предоставляемыми самой Microsoft.
Но для начала я хочу рассказать о версиях Windows 8.1. Не об изданиях — этого добра в сети много, а именно о публичных версиях сборок ОС. Ведь для любого администратора удобно загрузить образ со всеми интегрированными обновлениями, чем устанавливать сотню самостоятельно. Причём загрузить образ с сайта Microsoft, а не самодельную сборку с торрентов. Всё что я буду рассказывать о версиях ОС Windows 8.1 применимо и к Windows Server 2012 R2, за исключением канала для бесплатной загрузки образов для переустановки ОС. Но давайте всё по порядку.
Недавно я писал о том, как можно совершенно легально загрузить самый последний Microsoft Office с сайта Microsoft — как корпоративную версию, так и коробочную Retail — любые языки и продукты, со всеми интегрированными обновлениями. Сегодня я расскажу, как сделать то же самое и с операционной системой — средствами предоставляемыми самой Microsoft.
Но для начала я хочу рассказать о версиях Windows 8.1. Не об изданиях — этого добра в сети много, а именно о публичных версиях сборок ОС. Ведь для любого администратора удобно загрузить образ со всеми интегрированными обновлениями, чем устанавливать сотню самостоятельно. Причём загрузить образ с сайта Microsoft, а не самодельную сборку с торрентов. Всё что я буду рассказывать о версиях ОС Windows 8.1 применимо и к Windows Server 2012 R2, за исключением канала для бесплатной загрузки образов для переустановки ОС. Но давайте всё по порядку.
+67
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Registered
- Activity