Pull to refresh
2
0

Разработчик

Send message

Щупаем Kotlin (и чуть-чуть Gradle) на примере Отправлялки-длинных-твитов (открытые исходники)

Reading time5 min
Views13K
Я никогда не был любителем HelloWorld и туториалов. В них как правило решаются проблемы, которые данным инструментом решаются хорошо, а вот острые углы и недостатки деликатно обходятся. По-настоящему пощупать язык или библиотеку можно только на реальном приложении, написании «бизнес-кода», а не «сервиса фабрики сервисов фабрик моделей сервисов». Пример такого простого приложения — на видео. Ну что, поехали?


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

Генераторы непрерывно распределенных случайных величин

Reading time15 min
Views116K
Генератор случайных чисел во многом подобен сексу: когда он хорош — это прекрасно, когда он плох, все равно приятно (Джордж Марсалья, 1984)

Популярность стохастических алгоритмов все растет. Многие из них базируются на генерации большого количества различных случайных величин. Далеко не всегда равномерно распределенных. Здесь я попытался собрать информацию о быстрых и точных генераторах случайных величин с известными распределениями. Задачи могут быть разными, разными могут быть и критерии. Кому-то важно время генерации, кому-то — точность, кому-то — криптоустойчивость, кому-то — скорость сходимости. Лично я исходил из предположения, что мы имеем некий базовый генератор, возвращающий псевдослучайное целое число, равномерно распределенное от 0 до некого RAND_MAX

unsigned long long BasicRandGenerator() {
    unsigned long long randomVariable;
    // some magic here
    ...
    return randomVariable;
}

и что этот генератор достаточно быстрый. Я имею ввиду, что дешевле сгенерировать с десяток случайных чисел, нежели чем посчитать логарифм или возвести в степень одно из них. Это могут быть стандартные генераторы: std::rand(), rand в MATLAB, Java.util.Random и т.д. Но имейте ввиду, что подобные генераторы редко подходят для серьезной работы. Зачастую они проваливают разные статистические тесты. А также, помните, что вы полностью зависите от них и лучше использовать свой собственный генератор, чтобы иметь представление о его работе.

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


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

Равномерное распределение





Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments7

Как дизайнеру подготовить передачу Android-приложения разработчику

Reading time2 min
Views39K
Во время нарезки графики под приложения часто возникает множество сложностей: от разрешения устройств и проблемы с сетками и рекомендациями Google до непосредственно передачи приложения разработчику. За 2 года я работала над дизайном более 10 приложений, научилась находить решения самых разных проблем и делать так, чтобы в конечном итоге приложение выглядело так же, как и в дизайне.
Об этом и пойдет речь под катом.



Читать дальше →
Total votes 34: ↑28 and ↓6+22
Comments22

Передовой опыт Android-разработки

Reading time19 min
Views72K
Нам бы хотелось поделиться с вами опытом, который мы, в Futurice, получили, разрабатывая Android-приложения. Надеемся, эти советы уберегут вас от создания собственных велосипедов. Если вы интересуетесь iOS или Windows Phone разработкой, обратите внимание на соответствующие документы на нашем сайте.
Читать дальше →
Total votes 39: ↑32 and ↓7+25
Comments31

Про модель, логику, ООП, разработку и остальное

Reading time29 min
Views109K
Часто ли вы задумываетесь – почему что-то сделано так или иначе? Почему у вас микросервисы или монолит, двухзвенка или трехзвенка? Зачем вам многослойная архитектура и сколько у вас вообще слоев? Что такое бизнес-логика, логика приложения, презентационная логика и почему все так разделено? Посмотрите на свое приложение – как оно вообще спроектировано? Что в нем и где находится, почему это сделано именно так?
Потому что так написано в книжках или так говорят авторитетные личности? Какие ВАШИ проблемы решает тот или иной подход/паттерн?
Даже то, что на первый взгляд кажется очевидным, порой бывает очень сложно объяснить. А иногда, в попытке объяснения, приходит понимание того, что очевидные мысли были и вовсе ошибочны.
Давайте попробуем взять какой-нибудь пример и изучить на нем эти вопросы со всех сторон.
Читать дальше →
Total votes 55: ↑51 and ↓4+47
Comments34

Библиотека Chronos: облегчаем написание долгих операций

Reading time7 min
Views15K
Привет, Хабр! Хочу рассказать вам о библиотеке Chronos для Android (API level >= 9), цель которой – облегчить написание долгих операций, например, сетевых запросов, или обращений к БД.

Какую проблему решаем?

Не секрет, что для Android задача выполнения асинхронных операций всегда была одной из самых частовстречающихся. Действительно, крайне мало приложений работают исключительно в оффлайн, и где можно обойтись без сетевого взаимодействия. И уж совсем крохотная их часть обходится без обращения к постоянной памяти устройства, будь то база данных, Preferences или обычный файл. Однако, на протяжении истории развития системы нам так и не было предложено ни одного достаточно удобного решения “из коробки”.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments35

6 вещей, который я хотел бы знать перед разработкой своего первого Android-приложения

Reading time5 min
Views28K
От переводчика: перевод делался сходу, за один присест, так что в некоторых местах может быть немного топорным. В любом случае, вы знаете, куда писать об ошибках.
В комментариях к оригинальной статье есть несколько здравых мыслей, как, например, не использовать библиотеки с мира «большой» джавы, так как они слишком объемные, или использовать всякие Glide-ы вместо Picasso (с чем я, впрочем, согласен). Можете посмотреть, если интересно.
И еще, я не придумал, как заставить отображаться сниппеты с гитхаба, так что я просто скопировал код.


Мое первое приложение было ужасным. В самом деле, оно было настолько кошмарным, что я удалил его с маркета и больше даже не буду указывать его в своем резюме. То приложение могло быть не настолько ужасным, если бы я знал несколько вещей об Android-разработке перед его написанием.

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

Конечно, если вы пишете что-то по ходу изучения Android-разработки, скорее всего, позже вы все равно возненавидите свое творение. Как сказал @codestandards:

If the code you wrote a year ago doesn't seem bad to you, you're probably not learning enough.— Code Standards ( @codestandards) 21 мая 2015

(Если код, который вы написали год назад, не кажется вам плохим, вы, наверное, недостаточно учились)
Читать дальше →
Total votes 29: ↑20 and ↓9+11
Comments5

Забудьте о DAO, используйте Repository

Reading time6 min
Views176K
Недавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих здесь. Остальным интересующимся добро пожаловать под кат.
Читать дальше →
Total votes 28: ↑23 and ↓5+18
Comments14

Learndroid, урок №7: LayoutInflater, UI контролы, AdapterView

Reading time1 min
Views8.9K
Уже больше трех месяцев идет бесплатная Android онлайн-школа Learndroid, которую организуют e-Legion и Google. За это время зарегистрировалось более 20 000 учеников, а сайт школы посетили более четверти миллиона человек. Подробнее о формате можно прочитать в предыдущем посте.

Сегодня мы выкладываем седьмой урок, который подготовил Даниил dev_troy Сердюков (CTO e-Legion).



В лекции рассказано, что такое LayoutInflater, рассмотрены параметры метода inflate() и то, как происходит процесс преобразования xml в UI компоненты. Рассмотрены основные UI контролы, механика работы с ними, паттерн Listener.
Total votes 11: ↑11 and ↓0+11
Comments0

Material Design и поиск на примере приложения-справочника

Reading time8 min
Views28K

Введение


Несколько лет назад я писал статью на Хабр о приложении-справочнике по математике для Android, которое стало моим первым опытом в разработке для GooglePlay. Сегодня, оглядываясь назад на свой прошлый хабрапост и прошлую версию приложения, мне становится страшно (чтобы содрогнуться достаточно взглянуть на первый скриншот ниже). За прошедшие несколько лет многое поменялось: AndroidMarket стал называться GooglePlay с новыми правилами и прочим, выходили новые версии ОС, появилась некая общая google-концепция к дизайну приложений material-design, появились новые среды разработки, да и Хабр изменился.

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

Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments4

10 анти-паттернов навигации в Android

Reading time4 min
Views80K


В данной статье мы рассмотрим 10 анти-паттернов навигации в Android, которые допускают многие новички (и не только) в создании интерфейсов Android-приложений.

Читать дальше →
Total votes 116: ↑107 and ↓9+98
Comments26

Быстрый старт Data Binding в Android

Reading time8 min
Views66K

Введение


Профессионально андроид-разработкой занимаюсь чуть больше года, до этого разрабатывал по Windows Phone и мне понравилась возможность связывать данные из вью модели с самим View при помощи механизма Bindings. А после изучения RX, многие задачи стали решаться более чисто, вью-модель полностью отделилась от View. Она стала оперировать только моделью, совсем не заботясь о том, как она будет отображаться.

В Android такой строгости я не заметил, Activity или Fragment как простейшие представители контроллера чаще всего имеют полный доступ как ко View, так и к модели, зачастуя решая, какой View будет видим, решая таким образом чисто вьюшные задачи. Поэтому я довольно радостно воспринял новость о появлении Data Binding в Android на прошедшем Google IO.



Пока что это только бета релиз, но уже можно протестировать функционал и увидеть направление, в котором двигаются разработчики из Google.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments14

Олимпиада по программированию в LabVIEW. Решение команды-победительницы

Reading time8 min
Views16K
Компьютерные игры про танки являются одними из самых популярных в game-индустрии. История подобных игр насчитывает десятки лет, но популярность их не угасает. Тема танков и танковых сражений получает развитие не только в компьютерных играх, но и является предметом соревновательного процесса в программировании. Например, в 2012 году проходили соревнования по программированию Russian AI Cup — CodeTanks. Участникам предлагалось разработать искусственный интеллект управления танком. Спустя несколько лет подобное соревнование повторилось. Организатором выступила компания National Instruments, которая ежегодно проводит олимпиады по программированию в среде LabVIEW среди студентов и молодых ученых. Участникам олимпиады 2015 года предлагалось разработать алгоритм для автономного управления танком средствами LabVIEW (представление об этой среде программирования можете получить по ссылке: «LabVIEW — первое знакомство»). Данная статья посвящена описанию алгоритма танка-победителя от команды LabVIEWPortal.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments19

Использование junit-quickcheck на простом примере в практике TDD

Reading time8 min
Views7.6K
В очередной раз упражняясь в практике TDD на Java я создал небольшой учебный проект, в котором показал, что если тесты проходят, то это еще не значит, что код выполняется правильно. На самом деле, разработка модульных тестов, в которых учитываются различные варианты входных данных это кропотливая работа. Для решения возникшей проблемы нашел для себя библиотеку junit-quickcheck, опытом использования которой спешу поделиться.

К слову, на хабре про эту библиотеку уже есть отличная статья, но у меня используется другой пример тестируемого кода.
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments2

Возврат результата выполнения из DialogFragment во Fragment минуя Activity

Reading time3 min
Views32K

Введение


В этой публикации я покажу, как можно передавать события из DialogFrament в вызывающий Fragment минуя Activity.

В официальном Guide по Dialogs есть раздел PassingEvents. В нем рассказано, как вернуть результат работы DialogFragment в вызывающую Activity. Для этого создается дополнительный интерфейс. Activity реализует этот интерфейс, а у DialogFrament есть ссылка на Activity.

Если инициатором вызова DialogFragment является другой Fragment, то в таком подходе нам придется сначала отправить результат в Activity, а потом уже из Activity в заинтересованный в данных Fragment. Отсюда и минусы:
  • Activity знает о деталях реализации фрагмента (сегодня это дополнительный диалог, а завтра можем реализовать все на одном фрагменте);
  • дополнительный код (больше кода = больше возможностей для ошибок).

Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments15

Что вы хотели знать про Android Animation Framework, но боялись спросить

Reading time1 min
Views21K
Всем привет! Меня зовут Андрей Комрачков, я Android-разработчик в компании Aviasales и сегодня хочу показать вам видеозапись своего доклада, который я подготовил для LearnDroid – бесплатной online-школы Android-разработчиков, запущенной 30 марта компаниями Google и e-Legion.



Тема доклада: Android Animation Framework.
Цель урока: дать общие представления о том, какие у разработчика есть инструменты и возможности, а также как их применять на практике.
Продолжительность: 32 минуты полезной информации, без регистрации и смс.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments3

Видео. Пишем полноценное клиент-сервер приложение под Android

Reading time2 min
Views75K
Приветствую вас, уважаемый Developer!

Хочу поделиться с вами серией уроков, которые мы пишем на нашем канале. Цель данных уроков поделится своими знаниями в сфере Java/Android Development-а, показать как мы строим процесс разработки, и в итоге написать готовое приложение, которое будет общаться с сервером.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments8

Разработка ММО РПГ – практическое руководство. Сервер (часть 1)

Reading time10 min
Views45K
Турель Аннигилятор
  • Игровой backend: из каких модулей он должен состоять?
  • Расчет параметров персонажа: виртуальные методы или сложение массивов?
  • Логика поведения: на каком уровне она должна находится?
  • Перемещение персонажей: кто этим должен управлять?

        Сегодня мы продолжим знакомиться с разработкой и проектированием он-лайн игры на примере космической ММО RPG «Звездные Призраки». В этой статье речь пойдет о backend'е на С++ и она будет насквозь техническая.

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

        В статье мы сосредоточимся именно на архитектурных решениях применительно к backend'у MMO RPG в реальном времени. Исходного кода будет не много и он точно не будет содержать таких специфических для С++ вещей как множественное наследование или шаблоны. Задача данной статьи помочь в проектировании игрового сервера и ознакомить всех желающих со спецификой игрового backend'а.

        Описываемые решения достаточно универсальны и вполне подойдут для многих RPG. В качестве иллюстрации в конце статьи я приведу пример использования описанной архитектуры в игре «про эльфов».
Далее
Total votes 33: ↑29 and ↓4+25
Comments29

Ликбез — как стать программистом

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

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

Далее я постараюсь описать какими знаниями, умениями и навыками обладает хороший программист, и что нужно делать, что бы этого достичь.
Читать дальше →
Total votes 38: ↑17 and ↓21-4
Comments14

О RecyclerView и выделении элементов

Reading time14 min
Views102K
Привет, %username%!
В этой статье я хочу рассказать немного о новом виджете в Android SDK — RecyclerView, о реализации выделения элементов и нескольких полезных «рецептах» при работе с ним.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments11

Information

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