Обновить
256K+

Java *

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

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

Компиляция Java программ и разрешение зависимостей в runtime

Время на прочтение5 мин
Охват и читатели14K
Как можно совместить некоторые достоинства динамических языков со строгой типизацией в обычном Java коде?
Читать дальше →

Простой framework UI ERP c помощью Vaadin

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

Хабркат


Введение


Зачем это затевалось? Год назад начали писать ERP систему. И с того момента начался наш тернистый путь. Определили стек технологий с которым будем работать. Кратко описали задачу и приступили к работе.


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


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


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

Разработка виджета под Android для отображения курса bitcoin

Время на прочтение7 мин
Охват и читатели18K
Привет, хаброчитатели! Предыстория: с недавних пор отслеживаю рост курса криптовалюты bitcoin(BTC). Раньше для просмотра котировок заглядывал на сайт какой-нибудь биржи, но гораздо удобнее иметь на рабочем экране смартфона небольшой виджет, который отобразит актуальную информацию.

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

Вызов методов через reflection

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

Все программисты на Java явно или неявно пользуются reflection для вызова методов. Даже если вы не делали этого сами, это за вас наверняка делают библиотеки или фреймворки, которые вы используете. Давайте посмотрим, как этот вызов устроен внутри и насколько это быстро. Будем глядеть в OpenJDK 8 с последними обновлениями.

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

Пример использования RabbitMQ Delayed Message Exchange в Java Spring Framework

Время на прочтение6 мин
Охват и читатели37K
image В этом посте я хочу показать как использовать отложенные сообщения в RabbitMQ. В качестве примера задачи, где удобно использовать отложенную очередь, возьму механизм постбеков (s2s ping back, s2s pixel).

В двух словах о механизме постбеков:


1. Происходит некое событие
2. Ваше приложение должно уведомить об этом событии сторонний сервис
3. Если сторонний сервис оказался недоступен, то необходимо повторить уведомление еще раз через несколько минут

Для повторного уведомления я буду использовать отложенную очередь.
Читать дальше →

Модуляризация в JavaSE без OSGI и Jigsaw

Время на прочтение7 мин
Охват и читатели7K
mvn-classloader — загрузчик классов и ресурсов из maven совместимых репозитариев. Этот проект позволяет добавить ограниченную по возможностям и не сложную систему модулей в JavaSE приложение, где не нужна вся мощь и сложность OSGI.


Про то что еще позволяет делать mvn-classloader кроме модулей узнаете в статье.
Читать дальше →

Java-хардкор по-новосибирски: обзор и видео лучших докладов JBreak 2016. И анонс JBreak 2017

Время на прочтение6 мин
Охват и читатели12K
Что ни говори, а в Новосибирске обстановка суровая: суровая погода, суровая архитектура, – теперь можно с уверенностью сказать, что в Нске проходит еще и суровая Java-конференция. Без простых докладов, без аджайлов и скрамов, – только хардкор, в лучших традициях Joker и JPoint – и имя этой конференции JBreak.



В этом посте вы найдете:

  • Лучшие доклады JBreak 2016;
  • Ссылку на вообще все доклады JBreak 2016;
  • Анонс, кто будет выступать в этот раз;
  • Объяснение, почему конференция съедет из Академгородка.

Как не писать лишнего

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

Все программисты сталкиваются с boiler-plate кодом. Особенно Android-программисты. Писать шаблонный код — дело неблагодарное и, я уверен, что нет программиста, которому бы это доставляло удовольствие. В один прекрасный день я начал искать решения. Несмотря на то, что идея довольно проста: генерировать шаблонный код в отдельный класс и позже вызывать этот код в рантайме, готовых решений не нашлось, и я принялся за дело. Первая версия была реализована как один из подмодулей одного из рабочих проектов. Более двух лет я был доволен этим решением. Оно действительно работало и работало именно так, как я этого ожидал. Время шло, модуль дополнялся новыми функциями, рефакторился, оптимизировался. В целом PoC можно было назвать успешным, и я решил поделиться проектом с комьюнити.

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

RxJava. Убираем магию

Время на прочтение4 мин
Охват и читатели43K
Я долго боялся использовать RxJava в production. Её назначение и принцип работы оставались для меня загадкой. Чтение исходного кода не добавляло ясности, а статьи только путали. Под катом попытка ответить на вопросы: «Какие задачи эта технология решает лучше аналогов?» и «Как это работает?» с помощью аналогий с классической Java и простых метафор.

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

Обзор (и видеозаписи) лучших докладов Java-конференции JPoint 2016: BigData, кишки JVM и паззлеры

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


В апреле в Москве прошла JPoint 2016 – крупнейшая Java-конференция в России. Напомню, что на конференции было 50 докладов, которые шли в 4 треках в течение двух дней. В сентябре мы открыли доступ к видео для наших читателей, однако руки всё никак не доходили до публикации топ-10 докладов на Хабре.

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

Конечно, какие-то доклады оказываются лучше, какие хуже. Но в этом посте речь пойдет о 10 жемчужинах, лучших докладах, оценка каждого из которых оказалась выше 4.6 по пятибалльной шкале. Ссылка на остальные доклады по катом, так что вам будет чем заняться до Нового Года:)
Смотреть доклады

Разговор про Java 9 с Иваном Крыловым на jug.msk.ru

Время на прочтение3 мин
Охват и читатели11K
Завершающей этот год на jug.msk.ru стала встреча с Иваном Крыловым (Azul Systems), состоявшаяся 15 декабря 2016 года. Темой разговора стала давно ожидаемая Java 9.


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

Мониторим фриланс площадки в slack

Время на прочтение4 мин
Охват и читатели13K
В этой статье мы бы хотели рассказать о нашей новой платформе Job Freelance Scanner, которая находится в свободном доступе. В поисках нового проекта порой приходится мониторить фриланс площадки на наличие подходящего предложения. Это порождает ряд проблем: поиск по разным сайтам, вбивание в поиске нужных ключевых слов, отсеивание дубликатов — все это отнимает время. Плюс, надо помнить читал ли ты это предложение. Вот было бы удобно мониторить это одним инструментом, при этом в онлайн режиме.

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

После реализации приложения и локального запуска мы решили опубликовать его для сообщества, предоставить свободный доступ для использования, а также опубликовать исходники. В итоге, мы представляем платформу Job Freelance Scanner.

Возможности


Job Freelance Scanner — платформа для мониторинга предложений с крупных глобальных площадок по поиску работы, разработанная компанией Leadex Systems. Эта платформа позволяет получать предложения единым потоком в канал связи (Slack) от таких площадок как:


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


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

Отправка СМС используя jSMPP методами UDH, SAR, Payload

Время на прочтение10 мин
Охват и читатели11K
Наша компания занимается рассылками email и sms. На начальных этапах для рассылок смс мы использовали API посредника. Компания растет и клиентов становится все больше, мы приняли решение написать свой софт для отправки смс по протоколу smpp. Это нам позволило отправлять провайдеру набор байтов, а он уже распределял трафик по странам и внутренним операторам.

После ознакомления с доступными и бесплатными библиотеками для отправки смс выбор пал на jsmpp. Информацию по использованию, кроме этой, в основном разбирал из google по jsmpp. Описание самого протокола SMPP на русском языке тыц.

Надеюсь, что этой статьей я многим облегчу жизнь при написании SMPP сервиса.
Читать дальше →

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

Первые шаги в Java: как начать разрабатывать ничего не устанавливая

Время на прочтение5 мин
Охват и читатели82K
По прошествию многих лет я подумал, а как бы я разрабатывал свою первую программу на Java, если бы я начал сегодня?


Знакомство с Java было в университете и при воспоминаниях об этом бросает в холодный пот. Кроме нового незнакомого языка, приходилось устанавливать какой-то JDK, потом IDE, потом создавать первый проект и вручную добавлять в него библиотеки. Делать по аналогии с готовыми программами и ловить неизведанные java.lang.ClassNotFoundException и java.lang.NoSuchMethodException и тому подобный ужас. Когда знал как работать только в операционной системе Windows и доступ в интернет был по модему через телефонную линию.

Надеюсь интересно будет как тем, кто делает первые шаги в java и тем, кто помнит jdk 1.4. Попробуем online IDE Eclipse Che.
Узнаем новое или попробуем повторить первые шаги в java сейчас...

Особенности мультиоконного режима на Android-планшетах

Время на прочтение7 мин
Охват и читатели9.7K
Привет! В этой статье я хочу рассказать, какие проблемы могут возникнуть с появлением мультиоконного режима на планшетных версиях приложений. Команда Android-разработки компании Лайв Тайпинг столкнулась с ними, когда адаптировала приложение ИЛЬ ДЕ БОТЭ под планшет. Будьте готовы к тому, что эти же проблемы будут и у вас.

Как вы все знаете, в конце августа 2016 года вышла Android 7.0, и одной из её основных особенностей является поддержка мультиоконности. Это прекрасная функция, которая поднимает удобство Android на новый уровень. Все пользователи будут на седьмом небе от счастья, но то, что является счастьем для пользователя, может обернуться болью для разработчика. К сожалению, с мультиоконностью на планшетах именно так и произошло. И именно на планшетах — на телефонах-то с ней как раз всё отлично, заранее говорю.

Если вы делаете планшетные версии приложений или вы просто неравнодушны к мультиоконному режиму, то добро пожаловать в статью!
Читать дальше →

Разработка динамических REST-сервисов на документо-ориентированной БД Bagri

Время на прочтение16 мин
Охват и читатели5.5K
Не так давно, просматривая ленту CNews, наткнулся на анонс конференции “ИТ в здравоохранении: в ожидании прорыва”. Оказывается, “начиная с 2011 г. в России реализуется масштабный государственный проект по внедрению Единой государственной информационной системы в сфере здравоохранения (ЕГИСЗ)”. Углубившись немного в материал обнаружил, что ЕГИЗС базируется на широко используемых на западе стандартах организации Health Language 7 (далее HL7). А в основе стандартов HL7 лежит XML. Появилось желание построить прототип системы, обрабатывающей документы HL7, на документной БД Bagri и, если прототип выйдет удачным, подготовить доклад о нем на конференцию.

image

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

12 млрд реквестов в месяц за 120$ на java

Время на прочтение6 мин
Охват и читатели27K
Когда Вы запускаете свой продукт — Вы совершенно не знаете, что произойдет после запуска. Вы можете так и остаться абсолютно никому не нужным проектом, можете получить небольшой ручеек клиентов или сразу целое цунами пользователей, если про Вас напишут ведущие СМИ. Не знали и мы.

Этот пост об архитектуре нашей системы, ее эволюционном развитии на протяжении уже почти 3-х лет и компромиссах между скоростью разработки, производительностью, стоимостью и простотой.

Упрощенно задача выглядела так — нужно соединить микроконтроллер с мобильным приложением через интернет. Пример — нажимаем кнопку в приложении зажигается светодиод на микроконтроллере. Тушим светодиод на микроконтроллере и кнопка в приложении соответственно меняет статус.

Так как мы стартовали проект на кикстартере, перед запуском сервера в продакшене у нас уже была довольно большая база первых пользователей — 5000 человек. Наверное многие из Вас слышали про известный хабра эффект, который положил в прошлом многие веб ресурсы. Мы, конечно же, не хотели повторять эту участь. Поэтому это отразилось на подборе технического стека и архитектуре приложения.

Сразу после запуска вся наша архитектура выглядела так:



Это была 1 виртуалка от Digital Ocean за 80$ в мес (4 CPU, 8 GB RAM, 80 GB SSD). Взяли с запасом. Так как “а вдруг лоад пойдет?”. Тогда мы действительно думали, что, вот, запустимся и тысячи пользователей ринут на нас. Как оказалось — привлечь и заманить пользователей та еще задача и нагрузка на сервер — последнее о чем стоит думать. Из технологий на тот момент была лишь Java 8 и Netty с нашим собственным бинарным протоколом на ssl/tcp сокетах (да да, без БД, spring, hibernate, tomcat, websphere и прочих прелестей кровавого энтерпрайза).

Все пользовательские данные хранились просто в памяти и периодически сбрасывались в файлы:

try (BufferedWriter writer = Files.newBufferedWriter(fileTo, UTF_8)) {
  writer.write(user.toJson());
}

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

Автоинкремент версий в pom.xml через Jenkinsfile

Время на прочтение2 мин
Охват и читатели8.8K
Рано или поздно все разработчики Java решают мелкие задачи в области Continuos Integration. Не обошла эта участь и меня. Озадачился я проблемой автоматического инкремента версий в pom.xml при каждой итерации сборки проекта.

Дано: maven проект с несколькими модулями, мастер pom.xml и Jenkins-сервер (все как у настоящих пацанов).

Нужно: чтобы при каждом коммите автоматически собирался проект в любом бранче, а в ветке develop проект не только собирался, но и инкрементился номер билда, который задан третьим числом в версии вида 1.0.100-SNAPSHOT.

Для автоматической сборки Java-проекта в бранчах у нас используется Jenkins-проект на основе модного нынче Multibranch pipeline.

image

Суть этого workflow — периодически (например, раз в минуту), в Multibranch pipeline запускается задача, которая определяет изменения в бранчах и запускает сборку для тех бранчей, в которых что-то закоммитили. При этом, как у настоящих пацанов, для сборки бранча используется самый настоящий Jenkinsfile. Немного ликбеза: Jenkinsfile — это код на языке Groovy который определяет последовательность и инструкции по сборке проекта. Даже придумали для этого специальный термин «pipeline as code». Казалось, ничего вроде бы сложного нет — через groovy-скрипт инкрементим номер версии, коммитим и запускаем maven-сборку. Но тут нарисовывается главная проблема — как предотвратить последующие (бесконечные) сборки после того, как мы автоматом обновили pom.xml? Да, в Jenkins-плагине под названием 'git' (тот самый, который предназначен для детекта изменений в бранчах) есть даже специальная фича — «Polling ignores commits», но вот незадача — она не работает в Multibranch-pipeline. По этому поводу жаловались многие пользователи и даже завели специальный Jira-айтем. Поэтому — вперед, будем изобретать свой велосипед!
Читать дальше →

[Питер, анонс] Встреча JUG.ru с Андреем Ершовым: «Как мы делали телефонную платформу с использованием GridGain»

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


В четверг, 1 декабря, в 20:00 в офисе компании SEMrush состоится встреча JUG.ru с Андреем Ершовым, экспертом по распределенным системам. Андрей расскажет, как они в DINO Systems (Ring Central) сделали телефонную платформу с использованием GridGain. Для понимания большей части доклада знание GridGain или In-Memory Data Grid в целом не является обязательным.
Читать дальше →

Введение в разработку приложений для Android TV

Время на прочтение7 мин
Охват и читатели45K
Данная статься познакомит вас с разработкой простого приложения для Android TV. В первую очередь она ориентированна на тех, кто уже имел какой-либо опыт в разработке приложений для Android, поэтому я не буду здесь объяснять что такое Activity, Fragments и т.д.

В интернете есть много русскоязычной информации по разработке приложений для Android и не мало статей по написанию HelloWord для него же. Заинтересовавшись разработкой приложений для Android TV, я сразу же начал изучать эту тему на англоязычных сайтах. К моему удивлению материала оказалось не так уж и много, и я решил посмотреть что же есть на русском. На русском ничего найти не удалось (возможно плохо искал). В общем я намерен исправить эту ситуацию.
Читать дальше →