Обновить
128K+

Java *

Объектно-ориентированный язык программирования

164,21
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Планирование задач в Андроид

Время на прочтение4 мин
Охват и читатели46K

Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Schedule tasks and jobs intelligently in Android» от Ankit Sinhal.


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

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

Зачем изучать Spark?

Время на прочтение5 мин
Охват и читатели27K
Зачем разработчикам изучать Spark? Как освоить технологию в домашних условиях? Что умеет, а чего не умеет Spark и что ждет его в будущем? Об этом – в интервью с тренером по Java и Big Data в ЕРАМ Алексеем Зиновьевым.

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

«Java-разработчики не осознают проблему с профайлерами»: Андрей Паньгин и Нитсан Вакарт о Java-профилировании

Время на прочтение9 мин
Охват и читатели21K


Легко подумать, что от профилирования не стоит ожидать больших новостей: поскольку разработчики профилируют уже десятилетиями, до чего там можно было ещё не додуматься? Но в Java-профилировании кроются серьёзные подводные камни вроде safepoint bias, и появляются новые инструменты для решения подобных проблем.

Андрей apangin Паньгин (Одноклассники) недавно создал один из таких инструментов: на конференции JPoint в апреле он представил опенсорсный проект async-profiler, которому safepoint bias не страшен. Другой эксперт в этой теме — Нитсан Вакарт: о той же проблеме с safepoints многие узнали благодаря его блог-посту «Why (Most) Sampling Java Profilers Are Fucking Terrible».

Мы решили поговорить с ними обоими сразу, начав разговор с последних новостей об async-profiler, а позже перейдя к состоянию Java-профилирования в целом.
Читать дальше →

Retrofit на Android с Kotlin

Время на прочтение6 мин
Охват и читатели61K

image


Одним из самых захватывающих объявлений на Google I/O в этом году стала официальная поддержка Kotlin для разработки под Android.


Котлин на самом деле не новый язык, ему уже >5 лет и он довольно зрелый. Здесь вы можете получить более подробную информацию о языке


Я планирую поделиться некоторыми «практиками» использования Kotlin в разработке Android.

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

30+ инструментов для профессиональной разработки приложений под Android

Время на прочтение6 мин
Охват и читатели50K
image

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

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

Простой Java-код, ломающий систему вывода типов Scala

Время на прочтение2 мин
Охват и читатели10K

Простой код на Java: generic интерфейс, класс который его реализует, и метод, принимающий его экземпляр:


//Gen.java:
public interface Gen<A> {
    A value();
}

//GenInt.java:
public class GenInt implements Gen<Integer> {
    private final int i;
    public GenInt(int i) {
        this.i = i;
    }
    @Override
    public Integer value() {
        return i;
    }
}

//GenTest.java:
public class GenTest {
    public static <A extends Gen<T>, T> T test(A a) {
        return a.value();
    }
    public static void main(String[] argv) {
        GenInt g = new GenInt(42);
        Integer i = test(g);
    }
}

Он компилируется и даже запускается. Как вы думаете, что будет, если вам захочется вызывать метод test из Scala?


object TestFail extends App {
  val genInt = new GenInt(42)
  val i = GenTest.test(genInt)
}
Что может пойти не так?

Liscript — web REPL: поцелуи, велосипеды и экскаваторы

Время на прочтение5 мин
Охват и читатели4.2K


Некоторое время назад я написал интерпретатор лиспоподобного языка, который назвал Liscript. Опубликовал несколько статей на Хабре, посвященных особенностям реализации ядра, TCO, GUI, REPL-ботов и т.п. Недавно добавил web-интерфейс REPL-у (ссылка в конце статьи).

При чем здесь поцелуи и экскаваторы? Думаю, большинству известны такие аббревиатуры, как KISS (keep it simple stupid — делай это проще, дурачок), YAGNI (You ain't gonna need it — Вам это не понадобится), а также высказывания людей разной степени великости про архитектурных астронавтов, «все должно быть сделано так просто, насколько возможно, но не проще», и т.п.

Допустим, перед вами стоит задача — выкопать яму. Какие есть варианты решения? Взять лопату и выкопать самому — дешево и сердито, но долго и возможно неоптимально (зависит от вашего уровня владения лопатой и размеров ямы). Отдать на аутсорс таджикам (не будем рассматривать здесь этот вариант, хотя я должен был его упомянуть). Взять экскаватор — быстро и эффективно, но затратно: бензин/аренда, плюс не факт, что он проедет в вашу садовую калитку, значит надо сносить/восстанавливать забор и т.д. Также, необходимо определиться с моделью (порой из 100500 вариантов), а если вы будете управлять им самостоятельно, надо разобраться во всех его рычагах и педалях.

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

В общем, про выбор инструментов под задачи, и конкретные (подозреваю, что спорные) решения, которые я выбирал в процессе реализации проекта, под катом.
Читать дальше →

Изучаем App Shortcuts в Android Nougat 7.1

Время на прочтение8 мин
Охват и читатели16K

image


Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Exploring Android Nougat 7.1 App Shortcuts» от Andrei Catinean.


Google выпустил Android Nougat с версией 7.1 (API 25). Появились некоторые интересные функции под капотом. Одна из этих дополнительных функций — app shortcuts. Эта статья расскажет, что они собой представляют, как они работают, и как вы можете их реализовать.

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

«Один из ежедневных процессов ускоряется с 3 часов до 15 минут»: Андрей Богословских о in-memory computing в СберТехе

Время на прочтение5 мин
Охват и читатели12K


Слова «in-memory computing» звучат заманчиво и футуристично. Кому бы не хотелось устранить «бутылочное горлышко» скорости жёсткого диска, храня и обрабатывая данные в памяти? Но на практике возникают нюансы: например, из-за энергозависимости оперативной памяти данные всё равно надо дублировать в постоянной, и выигрыш получается при чтении, но не при записи. Каково реально работать с этим?

Большим соответствующим опытом обладают «Сбербанк-Технологии», где сейчас активно работают с Apache Ignite и даже инвестировали в создавшую его компанию GridGain. Поэтому мы решили задать несколько вопросов об этом опыте: разумеется, его нельзя слепо переносить на любую другую компанию, но он всё равно ценен. На них ответил Андрей Богословских, директор Центра Компетенции платформы поддержки развития бизнеса.
Читать дальше →

Барух Садогурский, JFrog: Developer Advocate, Java 9 и мировое господство Kotlin (но вы лучше посмотрите на Groovy)

Время на прочтение10 мин
Охват и читатели8.6K
В начале ноября в Киеве в седьмой раз пройдет конференция JavaDay. Мы пообщались с ее постоянным спикером Барухом jbaruch Садогурским — Developer Advocate в JFrog. За время беседы мы успели обсудить:

— Особенности работы Developer Advocate: почему он не должен продвигать продукты работодателя
— Java 9 и частоте релизов Java на примере маршруток и поездов
— Kotlin и его пути к мировому господству


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

Чат-бот своими руками: история одного велосипеда

Время на прочтение7 мин
Охват и читатели9.2K


Привет, хабр! Сегодня я расскажу о том, как своими руками с нуля собирались мозги для чат-бота, умеющего создавать резюме на основе беседы с человеком. Речь пойдет о том, как развивался написанный для этого дела велосипед, какие трудности встречал на своем пути и как изменялся в целях преодоления этих трудностей. Все описанные события происходили в процессе моего обучения в Школе программистов HeadHunter в 2017 году. Кому интересно — добро пожаловать под кат.
Читать дальше →

Тестируем новый механизм синхронизации настроек JetBrains IDEs

Время на прочтение2 мин
Охват и читатели14K
Привет, Хабр!

Если вы когда либо работали с JetBrains IDEs с разных компьютеров, вы могли сталкиваться с проблемой, что вам приходилось заново указывать настройки IDE (сочетания клавиш, подсветку синтаксиса, внешний вид, плагины и другие настройки).

До сих пор эту проблему частично решал встроенный плагин Settings Repository. Для того, чтобы, плагин синхронизировал настройки, необходимо самостоятельно создать Git репозиторий (на GitHub или другом сервисе) и указать его в IDE.

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

Ближайшие события

Разработка telegram бота с использованием Spring

Время на прочтение6 мин
Охват и читатели40K

Пишете телеграмм ботов? Ваша производительность разработки желает лучшего? Ищете чего-то нового? Тогда прошу под кат.


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

Codota: использование ИИ для улучшения кода

Время на прочтение2 мин
Охват и читатели15K
Привет Хабр! Хочу поделиться с вами одним инструментом, который помогает мне делать меньше ошибок в коде и реже гуглить по вопросам разработки.

image

В разрезе: новостной агрегатор на Android с бэкендом. Библиотека обхода интернет-сайтов на Java (crawler4j)

Время на прочтение3 мин
Охват и читатели3.5K
Вводная часть (со ссылками на все статьи)

Неотъемлемой частью системы сбора новостей является робот для обхода сайтов (crawler, круалер, «паук»). В его функции входит отслеживание изменений на указанных сайтах и внесение новых данных в базу данных (БД) системы.

Полностью готового и подходящего решения не было – в связи с этим потребовалось выбрать из имеющихся проектов что-то, что удовлетворяло бы следующим критериям:

  • простота настройки;
  • возможность настройки для обхода нескольких сайтов;
  • нетребовательность к ресурсам;
  • отсутствие дополнительных инфраструктурных вещей (координаторов работы, БД для «паука», дополнительных сервисов и т.д.).
Читать дальше →

Colibri-ui — наше решение по автоматизации тестирования мобильного приложения

Время на прочтение10 мин
Охват и читатели12K
C ростом команд неизбежно растет количество фич, а вместе с тем и тестовая модель и количество тест-кейсов, которые необходимо проверять при регрессионном тестировании. При этом количество команд растет не просто так, в нашем случае бизнесу хочется релизиться все чаще и чаще, не потеряв в качестве.

То, как мы в Альфа-Лаборатории решали проблему поиска баланса между скоростью, бюджетом и качеством, мы и рассмотрим сегодня на примере Альфа-Мобайла. Забегая вперед, ВНИМАНИЕ, СПОЙЛЕР!!! наше решение доступно на github: библиотека colibri-ui и шаблон colibri-ui-template для быстрого старта.

В написании статьи принимали активное участие Павел pvivanov и Лилия Lidiyatullina




Что случилось?


В далёком 2013 нас даже не посещали мысли об автоматизации тестирования, поскольку процесс регрессионного тестирования занимал один день одного тестировщика на обе ОС (iOS/Android).

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

«Есть плюсы как для админов, так и для разработчиков»: Олег Анастасьев про облако Одноклассников

Время на прочтение7 мин
Охват и читатели7.7K


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

Поэтому переход Одноклассников от подхода «каждый сервер занимается своей задачей» к облачному подходу «единый пул ресурсов распределяется по необходимости» вызвал у нас вопросы. Мигрировать такой большой проект с 11-летней историей на новую систему непросто — что именно побудило пойти на эти трудозатраты? Чем использование облака в Одноклассниках отличается от использования публичных сервисов? Почему проекту не подходят стандартные решения вроде Mesos и Kubernetes, и было сделано собственное one-cloud?

На эти и другие вопросы нам ответил ведущий разработчик Одноклассников Олег Анастасьев, уже знакомый читателям Хабра.
Читать дальше →

Атака клонов. Как бороться с дублированием кода?

Время на прочтение9 мин
Охват и читатели25K

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


В рамках данной статьи мне бы хотелось напомнить, что такое программные клоны, какие они влекут за собой проблемы и как с ними можно бороться. В статье приводятся примеры рефакторинга реальных клонов из популярного фреймворка Spring. В качестве инструментов используются Java 8, IDE IntelliJ IDEA 2017.1 и плагин Duplicate Detector 1.1.


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

MMO с нуля. Часть 2. Наращивание функционала + алгоритм Diamond Square

Время на прочтение169 мин
Охват и читатели16K
Всем привет! В предыдущей части мы разобрались с базовой архитектурой, сетью и обменом сообщениями. Нарастим теперь функционал. Сделаем возможность войти, зарегистрироваться получив при этом сессионный id, который можно в будущем использовать для управления клиентом в процессе игры. Далее мы добавим чат, по сути все работает по его принципу: получили сообщение — разослали подписантам. Сделаем возможность создавать игровые комнаты, где будем собирать игроков и отправлять в бой. Синхронизировать перемещение клиентов и напоследок проверять выстрел на проверочном сервере. Будет много кода, я продолжаю пошаговое описание, чтобы можно было быстро разобраться и воспроизвести для своих нужд. Для тех, кто не знаком с первой частью, но хочет вынести для себя что-то полезное здесь и сейчас, я добавил реализацию алгоритма генерации фрактальных ландшафтов Diamond Square, в начало. Happy coding!

Часть 1. Общая картина, сборка библиотек, подготовка клиента и сервера к обмену сообщениями
Часть 2. Наращивание игрового функционала + алгоритм Diamond Square


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