Как стать автором
Обновить
9
0

Пользователь

Введение в RxJava: Ключевые типы

Время на прочтение 7 мин
Количество просмотров 129K
Java *
rxjava
В вводной статье мы рассмотрели преимущества реактивного подхода в программировании на Java, а также ситуации в которых библиотека Rx бывает более или менее полезной. В этой части мы рассмотрим основные типы, на которых базируется концепция реактивного программирования и несколько дополнительных классов, которые помогут нам в понимании принципов работы библиотеки.
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 0

Многопоточное программирование в Android с использованием RxJava 2

Время на прочтение 13 мин
Количество просмотров 37K
Java *Разработка под Android *
Перевод
Если вы новичок в общении с RxJava или пытались разобраться в этом, но не довели дело до конца, то ниже вы найдете для себя кое-что новое.

image
Оригинал статьи написан 29 ноября 2017. Перевод вольный.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 0

Тюнинг производительности запросов в PostgreSQL

Время на прочтение 8 мин
Количество просмотров 25K
PostgreSQL *SQL *
Recovery mode
Перевод
Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в PostgreSQL. Мои методы не является исчерпывающими, скорее учебником для тех, кто просто тащится от тюнинга.

Поиск медленных запросов


Первый очевидный способ начать тюнинг — это найти конкретные операторы, которые работают плохо.

pg_stats_statements


Модуль pg_stats_statements — отличное место для начала. Он просто отслеживает статистику выполнения операторов SQL и может быть простым способом поиска неэффективных запросов.

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

SELECT *
FROM
  pg_stat_statements
ORDER BY
  total_time DESC;

user_id dbid queryid query calls total_time
16384 16385 2948 SELECT address_1 FROM addresses a INNER JOIN people p ON a.person_id = p.id WHERE a.state = @state_abbrev; 39483 15224.670
16384 16385 924 SELECT person_id FROM people WHERE name = name; 26483 12225.670
16384 16385 395 SELECT _ FROM orders WHERE EXISTS (select _ from products where is_featured = true) 18583 224.67

Читать дальше →
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 6

ReactiveX 2.0 с примерами, или грокаем реактивное программирование 2.0. Часть 1: Observable vs Flowable, Backpressure

Время на прочтение 16 мин
Количество просмотров 62K
Java *Разработка под Android *
image

Привет, меня зовут Алексей. Я пишу Backend'ы на Kotlin, а также занимаюсь разработкой Android приложений. Продолжительное время я страдал: мучался с CallBack Hell'ом, императивным стилем, синхронизацией потоков и прочими классическими проблемами Java на Android. Это была огромная боль. И я начал искать какое-то решение, чтобы как-то избавится от этой боли. И приходит счастливый случай — я встречаю нарастающий хайп по RxJava. Попробовав, не могу остановиться по сей день. На момент написания данной статьи, релизнулась RxJava 2.0 и появилось стойкое желание разобраться в нововведениях. На официальном источнике, в Github Wiki, появилась глава RxJava 2.0: What's different in 2.0. Но, к сожалению, я не обладатель "беглого" английского, и чтение настолько важной доки заняло время. Накопились некоторые заметки, появился концепт, которым я хочу поделиться. Но чтобы не стать "Арт-директором Арт-пространства" и не принести банальный перевод, а какой-то профит, данная статья будет смесь туториала и перевода вики, приправленное реальными примерами юзкейсов на RxKotlin.


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

Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 2

Управление высокодоступными PostgreSQL кластерами с помощью Patroni. А.Клюкин, А.Кукушкин

Время на прочтение 62 мин
Количество просмотров 72K
Системное администрирование *PostgreSQL *SQL *Администрирование баз данных *DevOps *
Туториал

Расшифровка доклада/tutorial "Управление высокодоступными PostgreSQL кластерами с помощью Patroni". А.Клюкин, А.Кукушкин


Patroni — это Python-приложение для создания высокодоступных PostgreSQL кластеров на основе потоковой репликации. Оно используется такими компаниями как Red Hat, IBM Compose, Zalando и многими другими. С его помощью можно преобразовать систему из ведущего и ведомых узлов (primary — replica) в высокодоступный кластер с поддержкой автоматического контролируемого (switchover) и аварийного (failover) переключения. Patroni позволяет легко добавлять новые реплики в существующий кластер, поддерживает динамическое изменение конфигурации PostgreSQL одновременно на всех узлах кластера и множество других возможностей, таких как синхронная репликация, настраиваемые действия при переключении узлов, REST API, возможность запуска пользовательских команд для создания реплики вместо pg_basebackup, взаимодействие с Kubernetes и т.д.


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


  • область применения: какие задачи HA успешно решаются Patroni
  • обзор архитектуры
  • создание тестового кластера
  • утилита patronictl
  • изменение конфигурации PostgreSQL для кластера, управляемого Patroni
  • мониторинг с помощью API
  • подходы к переключению клиентов
  • дополнительные возможности: ручное переключение, перезагрузка по расписанию, режим паузы
  • настройка синхронной репликации
  • расширяемость и универсальность
  • частые ошибки и их диагностика

Всего голосов 17: ↑16 и ↓1 +15
Комментарии 9

Apache Kafka: обзор

Время на прочтение 12 мин
Количество просмотров 309K
Блог компании Издательский дом «Питер» Программирование *Java *Apache *Big Data *
Перевод
Привет, Хабр!

Сегодня мы предлагаем вам сравнительно краткую, но при этом толковую и информативную статью об устройстве и вариантах применения Apache Kafka. Рассчитываем перевести и выпустить книгу Нии Нархид (Neha Narkhede) et. al до конца лета.


Приятного чтения!
Читать дальше →
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 19

Загрузка и хранение фотографий в Web приложениях

Время на прочтение 4 мин
Количество просмотров 104K
Блог компании .io PHP *Обработка изображений *

Почему это важно?


На современных web сайтах объем картинок может составлять от 30% до 70% всего размера страницы. Например, объем изображений на Хабре обычно составляет несколько мегабайт.

размер фоток на странице

Большинство изображений в Web'e — это фотографии. Профильные фото в соц. сетях, альбом с телефона, профессиональные снимки и т.п. Правильная стратегия и инструменты для работы с фотографиями позволят сделать сайт быстрым для посетителей.
Читать дальше →
Всего голосов 35: ↑31 и ↓4 +27
Комментарии 82

Руководство Google по форматированию кода на Java

Время на прочтение 20 мин
Количество просмотров 22K
Программирование *Java *Совершенный код *Проектирование и рефакторинг *Разработка под Android *
Перевод
image

1. Введение


В данном документе описаны стандарты написания кода на языке программирования Java в корпорации Google. Исходный код Java считается соответствующим этим стандартам тогда и только тогда, когда он удовлетворяет всем описанным в документе правилам.

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

Читать дальше →
Всего голосов 21: ↑12 и ↓9 +3
Комментарии 5

Многопоточность в Java: ExecutorService

Время на прочтение 2 мин
Количество просмотров 236K
Java *
Перевод
В Java 5 было добавлено много вещей для организации многопоточности и особенно касаемо организации параллельного доступа. В этой и последующих статьях мы пройдемся по некоторыми из них.
ExecutorService и ScheduledExecutorService будут рассмотрены в этой статье
Всего голосов 50: ↑50 и ↓0 +50
Комментарии 20

Многопоточность в Java

Время на прочтение 14 мин
Количество просмотров 1M
Программирование *Java *Параллельное программирование *
Туториал
Из песочницы
Здравствуйте! В этой статье я вкратце расскажу вам о процессах, потоках, и об основах многопоточного программирования на языке Java.
Наиболее очевидная область применения многопоточности – это программирование интерфейсов. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Например, поток, отвечающий за интерфейс, может ждать завершения другого потока, загружающего файл из интернета, и в это время выводить некоторую анимацию или обновлять прогресс-бар. Кроме того он может остановить поток загружающий файл, если была нажата кнопка «отмена».

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

Давайте начнем. Сначала о процессах.
Читать дальше →
Всего голосов 75: ↑59 и ↓16 +43
Комментарии 97

Drag и Swipe в RecyclerView. Часть 2: контроллеры перетаскивания, сетки и пользовательские анимации

Время на прочтение 7 мин
Количество просмотров 15K
Программирование *Разработка мобильных приложений *Разработка под Android *Дизайн мобильных приложений *
Туториал
Перевод

Drag и Swipe в RecyclerView. Часть 2: контроллеры перетаскивания, сетки и пользовательские анимации


В первой части мы рассмотрели ItemTouchHelper и реализацию ItemTouchHelper.Callback, которая добавляет базовые функции drag & drop и swipe-to-dismiss в RecyclerView. В этой статье мы продолжим то, что было сделано в предыдущей, добавив поддержку расположения элементов в виде сетки, контроллеры перетаскивания, выделение элемента списка и пользовательские анимации смахивания (англ. swipe).

Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 0

Реализация поиска с использованием RxJava

Время на прочтение 4 мин
Количество просмотров 19K
Java *Разработка под Android *
Туториал
Перевод
В данной статье будет рассмотрена оптимальная и компактная реализация поиска с использованием RxJava для Android, отсеивающая ненужные результаты и уменьшающая количество бесполезных сетевых вызовов.

Пример поиска
Оригинал написан 16 октября 2017. Перевод вольный.
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 13

Исследуем RxJava 2 для Android

Время на прочтение 25 мин
Количество просмотров 204K
Блог компании Badoo Программирование *Java *Разработка мобильных приложений *Разработка под Android *
Перевод

enter image description here


Меня зовут Аркадий, я Android-разработчик в Badoo. В последнее время в нашем блоге много постов про Go, PHP, JS, QA, и я решил разбавить их темами по мобильной разработке. Как раз занимался портированием одного Android-проекта с RxJava 1 на RxJava 2 и читал всё, что можно найти на эту тему в интернете. В частности, доклад Джейка Вортона с конференции GOTO Copenhagen 2016. Мне показалось, что это достойный кандидат на перевод – думаю, многие Android-разработчики задумываются о переходе на RxJava 2, и им интересно, что изменилось по сравнению с первой версией.


Джейк сделал достаточно объёмное введение о реактивном программировании, так что знание RxJava 1 не требуется для понимания статьи. Доклад был подготовлен, когда RxJava2 ещё только готовилась к выпуску (на текущий момент уже выпущена версия 2.1.0).

Читать дальше →
Всего голосов 42: ↑41 и ↓1 +40
Комментарии 5

Собираем проект на python3&PyQT5 под Windows, используя PyInstaller

Время на прочтение 4 мин
Количество просмотров 147K
Python *
Из песочницы

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


Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 18

Подключение к session в Java и Python. HttpURLConnection и CookieManager (Java). Requests(Python)

Время на прочтение 4 мин
Количество просмотров 9.3K
Python *Java *
Туториал
Допустим, что нам надо подключиться к серверу, авторизоваться и поддерживать сессию. В браузере это выглядит следующим образом:

  1. На адрес http://localhost:8080/login отправляется пустой GET запрос.
  2. Сервер присылает формочку для заполнения логина и пароля, а также присылает Cookie вида «JSESSIONID=094BC0A489335CF8EE58C8E7846FE49B».
  3. Заполнив логин и пароль, на сервер отправляется POST запрос с полученной ранее Cookie, со строкой в выходном потоке «username=Fox&password=123». В Headers дополнительно указывается «Content-Type: application/x-www-form-urlencoded».
  4. В ответ сервер нам присылает новую cookie c новым «JSESSIONID=». Сразу же происходит переадресация на http://localhost:8080/ путём GET запроса с новой Cookie.
  5. Далее можно спокойно использовать остальное API сервера, передавая последнее Cookie в каждом запросе.

Рассмотрим, как это можно реализовать на Java и на Python.


Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 8

Старые песни о главном. Java и исходящие запросы

Время на прочтение 8 мин
Количество просмотров 59K
Блог компании Umbrella IT Java *
Туториал

(Иллюстрация)

Одна из задач, с которой сталкиваются 99,9% разработчиков, — это обращение к сторонним endpoint’ам. Это могут быть как внешние API, так и «свои» микросервисы. Сейчас все и вся бьют на микросервисы, да. Получить или отправить данные просто, но иногда изобретают велосипеды. Можете назвать 5 способов реализации запросов на Java (c использованием библиотек и без)? Нет — добро пожаловать под кат. Да? Заходите и сравните ;)
Читать дальше →
Всего голосов 31: ↑27 и ↓4 +23
Комментарии 21

Работа с распределенной системой контроля версий Git на примере GitHub

Время на прочтение 20 мин
Количество просмотров 59K
Программирование *IT-инфраструктура *Git *GitHub *Управление разработкой *
Recovery mode
Работа с распределенной системой контроля версий Git на примере GitHub
Год начала данной публикации: 2019
Год окончания данной публикации: не указан





Теоретическая часть
Практическая часть
Настройка программы Git
Инициализация локального репозитория
Работа с удаленным репозиторием
Чтобы некоторые ваши файлы не попадали в репозиторий
Модели ветвления в Git
Выводы
.gitignore. Отправка только тех файлов в репозиторий, которые необходимы



Предупреждение по использованию:
Читать дальше →
Всего голосов 32: ↑21 и ↓11 +10
Комментарии 9

Планирование задач в Android с использованием JobScheduler и IntentService

Время на прочтение 11 мин
Количество просмотров 34K
Программирование *Java *Разработка мобильных приложений *Разработка под Android *Промышленное программирование *
Туториал


Иногда при разработке под OS Android возникает необходимость выполнять ресурсоемкие операции периодически, регулярно или по запросу, и для этих операций важно, например, наличие интернета или чтобы устройство "не спало". Чаще всего при решении подобных задач применяются AlarmManager, WakefulBroadcastReceiver, либо же вообще WakeLock контролируется вручную. Все это не рекомендуется в документации для разработчиков под Android, а WakefulBroadcastReceiver уже отмечен как deprecated с API level 26.0.0.


Что же мы можем сделать, чтобы следовать рекомендациям Google и создавать приложения с более гибким поведением на версиях Android 5.0+, в которых энергосбережению уделяется все больше внимания? Если вы готовы выставить минимальный API level 21.0.0 для своего приложения, предлагаю под катом пример использования JobScheduler в связке с IntentService для последовательного выполнения трудоемких задач.

Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 10

Сериализация в Java. Не все так просто

Время на прочтение 9 мин
Количество просмотров 120K
Программирование *Java *ООП *Хранение данных *
Из песочницы


Сериализация (Serialization) — это процесс, который переводит объект в последовательность байтов, по которой затем его можно полностью восстановить. Зачем это нужно?
Читать дальше →
Всего голосов 11: ↑7 и ↓4 +3
Комментарии 16

Автоматизация инструментов Qt

Время на прочтение 3 мин
Количество просмотров 4.9K
Open source *Программирование *Qt *
Из песочницы

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



Читать дальше →
Всего голосов 13: ↑10 и ↓3 +7
Комментарии 13

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность