Обновить
512K+

Java *

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

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

Как растаращить class-файл

Время на прочтение4 мин
Охват и читатели45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →

ASH Viewer

Время на прочтение5 мин
Охват и читатели26K
Предыстория (2008 г.)

По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.

Но, во-первых, процесс миграции на новую версию достаточно длительный, и некоторые заказчики продолжали использовать старые версии. А во-вторых, средства визуализации истории активных сессий от Oracle, которые имелись в наличии:
  • Требовали некоторых телодвижений по их установке и настройке – это Oracle Enterprise Manager Console (DB Console) или Oracle Enterprise Manager Grid Control (сейчас Oracle Enterprise Manager Cloud Control). DB Console из моей (и не только) практики требовал для установки применения очень сильных админских заклятий. Также в целях экономии ресурсов не все хотят ставить на сервера БД дополнительные сервисы или разворачивать на своей площадке отдельную инфраструктуру для мониторинга;
  • Обладали рядом архитектурных недостатков. К примеру, в случае зависания сервера БД доступ к информации из истории активных сессий посредством Oracle Enterprise Manager Console становился невозможным, и оперативно выяснить, что «что-то пошло не так» (с) было практически нереально;
  • Отсутствовала функциональность в части сохранения данных мониторинга и последующего его анализа на своей площадке.

Из сторонних бесплатных средств, похожая функциональность была реализована в утилите ASHMON за авторством Kyle Hailey. Но функционал был только для просмотра, и работала она под одну платформу – Windows.

В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.



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

.NET/Mono в Java? Легко!

Время на прочтение11 мин
Охват и читатели20K
Здравствуйте. Хочу представить свой проект – компилятор .NET/Mono в Java. Целью проекта является создание компилятора, и набора стандартных библиотек позволяющих переносить написанные приложения и библиотеки на платформу Java, версии 1.6 и выше. Из аналогичных проектов мне известен лишь проект dot42. Но он заточен под Android и имеет собственную стандартную библиотеку не совсем совместимую с .NET/Mono.

Пока есть только альфа версия, и поэтому для реального использования компилятор пока не годится, однако уже частично работоспособен, генерирует валидный код Java и поддерживает часть стандарта ECMA-335.

Исходные коды на github.com: https://github.com/zebraxxl/CIL2Java

Подробнее о том, что не поддерживается, что поддерживается и как это все работает.

6 способов: как добавить security для Rest сервиса в Java

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

В данной статье я попытаюсь описать несколько способов, а точнее 6, как добавить security для rest сервиса на Java.



Перед нашей командой была поставлена задача найти все возможные способы добавить security к rest сервису. Проанализировать все за и против и выбрать наиболее подходящий для нашего проекта. Когда я начал искать такую статью в Гугле ничего подходящего не нашел, а были лишь фрагменты и мне пришлось собирать эту информацию по крупицам. Так что думаю, данная статья будет полезна и другим Java разработчикам, пишущим back-end. Я не буду утверждать, что какой-то из этих способов лучше или хуже, все зависит от поставленной задачи и конкретного проекта. Поэтому какой из шести способов подходит больше всего вашему проекту решать только Вам. Я постараюсь описать принцип каждого из подходов и дать небольшой пример с использованием Java и Spring Security.

6 способов

Как я потерял пароль от Android keystore, но потом смог восстановить с помощью Jetbrains Idea

Время на прочтение3 мин
Охват и читатели33K
Предыстория

Жило-было в Google Play Android приложение с несколькими тысячами пользователей. Через год понадобилось его обновить. Ок, запускаем Idea, выбираем «Build» — «Generate Signed APK». Вспоминаю что за это время успел пересесть в Linux, ничего страшного, выбираю файл с ключами, ввожу ранее заботливо записанный пароль… Не подходит. Хмм… Ввожу еще раз, еще… Перебор вариантов, переспрос коллег… Всё плохо.
Что делать, что делать?

Что в ORM тебе моем? Околонаучный подход выбора ORM для Android

Время на прочтение11 мин
Охват и читатели27K
Выбор инструментов, которые так или иначе понадобятся при разработке – один из главных подготовительных этапов на старте нового Android-проекта.
В случае, если вы разрабатываете приложение, которое должно в том или ином виде хранить большое количество сущностей – вам не избежать использования баз данных. В отличие от коллег по цеху, разрабатывающих для iOS, у Android-программистов нет удобных инструментов, облегчающих хранение объектов вроде Core Data, предоставляемых платформой (кроме Content Provider, о том почему он не в счет, будет дальше). Поэтому многие Android-разработчики прибегают к использованию сторонних ORM-решений в своих проектах. О том, на что стоит смотреть при выборе библиотеки для вашего проекта, и пойдет речь в этой статье.


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

GSON. Добавим ему немного строгости и решаем проблему переполнения памяти при обработки больших JSON файлов

Время на прочтение8 мин
Охват и читатели14K
Вероятно многие сталкивались с библиотекой GSON от Google, которая легко превращает JSON файлы в Java объекты и обратно.

Для тех, кто с ней не сталкивался, я подготовил краткое описание под спойлером. А так же описал решения на GSON двух проблем, с которыми реально сталкивался в своей работе (решения не обязательно оптимальные или лучшие, но, возможно, кому-то они могут пригодится):

1) Проверки что мы не потеряли ни одного поля из JSON'a файла, а также проверки того что все обязательные поля в Java классе были заполнены (делаем GSON более строгим);
2) Ручной парсинг с помощью GSON, когда приходится обрабатывать очень большой JSON файл, чтобы избежать ошибки out of memory.
Читать дальше →

Об Oracle Coherence по-русски: Зачем он нужен?

Время на прочтение12 мин
Охват и читатели22K
В данной статье вы найдете ответ на поставленный вопрос, а также в ней будут объяснены базовые понятия по технологии распределенных вычислений в Oracle Coherence. Это вводная статья, главной задачей которой является объяснение “словаря” терминов, которым пользуются разработчики Coherence. Я приведу термины в том числе и на английском языке, для облегчения поиска информации для тех, кто захочет узнать больше в этом направлении.
Для тех, кому эта тема интересна, прошу под кат
Читать дальше →

Kotlin для Android, или лёгкий способ перестать программировать на Java

Время на прочтение1 мин
Охват и читатели41K
На нашей конференции мобильных разработчиков #MBLTDev, которая прошла в конце октября в Москве, продуктолог компании JetBrains Илья Рыженков рассказал доклад о языке программирования под Android Kotlin.

Kotlin был разработан в компании JetBrains и публично представлен в 2011 году. В 2012 был открыт исходный код.


Презентация

Илья рассказал про историю создания языка, преимуществах программирования на Kotlin, отличия Kotlin от Java и о том, что на нем можно делать. А также показал несколько примеров кода на Kotlin для платформы Android.
Читать дальше →

Статически проверяемые ссылки на свойства Java-бинов

Время на прочтение5 мин
Охват и читатели8.6K
Когда долго и серьезно используешь какой-либо инструмент, неминуемо возникают претензии к нему — неудобства, с которыми сперва миришься, но в какой-то момент понимаешь, что проще один раз исправить, чем все время страдать. Хорош тот инструмент, который позволяет «допилить» сам себя.

Java — хороший инструмент, поэтому об одном таком неудобстве и о том, как мы его исправляли, и пойдет речь.
Читать дальше →

10 возможностей быть продуктивнее с Eclipse для Java разработчиков

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


Многие из вас знают, как эффективно повышает производительность использование горячих клавиш, шаблонов кода и очень клёвой строки поиска (Quick Access), но я бы хотел рассказать о десяти возможностях, которые знают не все.
Стать продуктивнее

Consulo: ~1000 коммитов, или как прошла осень

Время на прочтение3 мин
Охват и читатели17K
Для тех, кто пропустил мои посты:

Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.

Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.


Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.
Читать дальше →

Java-конференция Joker 2014 глазами докладчика из Сибири

Время на прочтение4 мин
Охват и читатели16K
Недавно в Санкт-Петербурге прошла Java — конференция Joker 2014. На мой взгляд, самая технически насыщенная и масштабная из всех подобных в России.

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



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

Казалось бы, после принятия заявки я как обычно смогу дудеть в дуду и ничего не делать, ваять потихоньку презентацию. Но не тут-то было! Мне пришлось пройти строгое предпрослушивание и пару тренингов, перед тем как сдать окончательный вариант доклада организаторам. Имейте это ввиду, когда сами будете посылать заявки этой команде маньяков!
Читать дальше →

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

Мониторинг серверов через очередь заданий на JAVA

Время на прочтение3 мин
Охват и читатели11K
Недавно был озадачен проблемой мониторинга нескольких десятков серверов (ну наверно редко кто не сталкивался с такой задачей). Проблему можно описать несколькими правилами:

  1. Нужно периодически пинговать сервер
  2. Иногда выполнять какое-либо действие с сервером (например, исполнение команды через ssh), которое засабмитил пользователь
  3. Действия с серверами могут нескольких типов, у каждого действия свой приоритет
  4. Таски (из п.1-3) нельзя выполнять одновременно для каждого сервера
  5. Таски могут завершаться с неудачей, например по причине отсутствия связи с сервером, нужно ждать пока связь восстановится и пытатся выполнить запланированную задачу


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

Стоит ли использовать Spring Boot в вашем следующем проекте?

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


Большинство моих профессиональных Java проектов за последнее десятилетие были основаны на Spring или JEE. Обе платформы развиваются достаточно уверенно, однако все ещё страдают от различных проблем.

Spring и JEE по-прежнему остаются золотыми стандартами для масштабных Java-проектов и больших команд разработчиков, трудящихся над сложными enterprise-решениями. Однако, неизбежным следствием зрелости Java-сообщества стала частичная потеря прежнего энтузиазма и инновационности, что существенно ударило по авторитету обоих.
Читать дальше →

Элегантный Builder на Java

Время на прочтение7 мин
Охват и читатели154K
Наверняка большинство сколько-нибудь опытных программистов знакомы с паттерном Builder. Он позволяет сделать инициализацию структур данных более наглядной, гибкой при этом сохраняя такое полезное их свойство как неизменяемость (immutability). Вот классический пример с первой страницы выдачи гугла на запрос «java builder pattern example». При всех своих преимуществах, самый главный недостаток данной реализации паттерна — в два раза больше кода, по сравнению с обычным плоским бином. Если генерация этого дополнительного кода не проблема для любой популярной IDE, то редактировать такой класс становится достаточно утомительно и читабельность страдает в любом случае.
Что же делать?

Notifications на основе билдера с кастомным лейаутом и картинкой

Время на прочтение9 мин
Охват и читатели6.8K
Приветствую!

Балуюсь разработками приложений под Android, но до сих пор не использовал Builder для создания уведомлений, а делал это старым добрым методом, как описано, например, в данной статье. Однако данный метод не только уже устарел, но даже больше — он является deprecated. Кроме того, передо мной еще стояла задача выводить в каждом Notification-е свою картинку, которой при том нет в составе проекта и я не могу на нее сослаться через R.drawable, как, например, аватарка пользователя, которого я добавляю в процессе использования приложения и т.п. Если интересно — добро пожаловать под кат.
Читать дальше →

Самопальный фрэймворк Arachnidium для тестирования web и мобильных приложений. Part 2. Немного о настройках

Время на прочтение4 мин
Охват и читатели4.5K
И снова всем привет!

По итогам опроса, который я оставил в свой предыдущей статье «Самопальный фрэймворк Arachnidium для тестирования web и мобильных приложений. Get started!» большинство проголосовало «ЗА». Что же, show must go on!

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

Данный пост как-бы визуализирует главу Configuration моей собственной документации (пока это вики странички на github), которую в ближайшее время предстоит актуализировать. Здесь будет представлен простой пример подготовки настройки, а так же пример того, как я предполагаю использовать свой формат в контексте автоматизации тестов при помощи Selenium и Appium. Статья содержит интересное и наглядное, как мне думается, видео.

План:
— Что за проблему я попробовал решить?
— Простая демонстрация
— Демонстрация на примере кросс-браузерного теста
— Чего не хватает
— Анонс

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

Чистый код с Google Guava

Время на прочтение9 мин
Охват и читатели117K
Наверное, любому программисту доводилось видеть код, пестрящий большим количеством повторов и реализации «низкоуровневых» действий прямо посреди бизнес-логики. Например, посреди метода, печатающего отчёт, может оказаться такой фрагмент кода, конкатерирующий строки:

StringBuilder sb = new StringBuilder();
for (Iterator<String> i = debtors.iterator(); i.hasNext();) {
  if (sb.length() != 0) {
    sb.append(", ");
  }
  sb.append(i.next());
}
out.println("Debtors: " + sb.toString());

Понятно, что этот код мог бы быть более прямолинейным, например, в Java 8 можно написать так:

out.println("Debtors: " + String.join(", ", debtors));

Вот так сразу гораздо понятнее, что происходит. Google Guava – это набор open-source библиотек для Java, помогающий избавиться от подобных часто встречающихся шаблонов кода. Поскольку Guava появилась задолго до Java 8, в Guava тоже есть способ конкатенации строк: Joiner.on(", ").join(debtors).
Рассмотрим часто встречаемые шаблоны кода

Маршруты на картах Google в Android-приложении

Время на прочтение7 мин
Охват и читатели49K
Недавно у меня возникла необходимость отображать маршрут между двумя точками на карте Google в моем приложении. На Хабре уже были публикации на эту тему. Например, «Маршруты на картах Google в вашем Android-приложении». Однако этим материалам уже довольного много времени и они не используют новых возможностей. Хочу показать еще один способ рисования маршрутов, может быть, кому-то он окажется полезен.
Читать дальше →