Обновить
128K+

Java *

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

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

Хешируем строки на этапе компиляции с помощью annotation

Время на прочтение9 мин
Охват и читатели11K
Недавно я начал разрабатывать приложение под Android и передо мной возникла задача защитить его от реверса. Беглый просмотр гугла позволил предположить, что ProGuard, входящий в состав Android Studio, с задачей справится. Результат меня действительно устроил за исключением одной маленькой детали — строки.
Программа обменивается с сервисом информацией с помощью Intent. Ключевой частью которых является строка действия. И если для взаимодействия с системой или другими приложениями строка должна иметь определённый формат, то для обменов внутри приложения достаточно её уникальности. Для удобства рекомендуется составлять данную строку из имени пакета и названия действия. Например:
public final class HandlerConst {
    public static final String ACTION_LOGIN = "com.example.app.ACTION_LOGIN";
}

Это удобно для отладки, но сильно снижает качество обсфускации кода. Хочется, чтоб в релизе программы вместо данной строки оказался, например, её MD5 хеш.
public final class HandlerConst {
    public static final String ACTION_LOGIN = "7f315954193d1fd99b017081ef8acdc3";
}

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

Передаем файлы на Java с помощью ØMQ и JZMQ

Время на прочтение11 мин
Охват и читатели15K
Приветствую, мы являемся небольшой компанией единомышленников которые разрабатывает продукт предназначенный для управления данными, вне зависимости от их формата и метода хранения — ArkStore, в нашем блоге мы попытаемся поделится опытом, который мы накопили, в ходе, его уже почти двухлетней разработки. Первую статью я решил посветить IO слою и продукту под названием ØMQ (или ZeroMQ). Я попытаюсь рассказать как начать пользоваться ØMQ и как с его помощью можно передавать достаточно большой объем данных.
Читать дальше →

Загружаем в Oracle данные SNMP-мониторинга

Время на прочтение38 мин
Охват и читатели6.6K
Некоторое время назад, я написал статью посвященную вопросам оптимизации загрузки данных в БД Oracle. Судя по обилию последовавших комментариев, статья вызвала живой интерес, но, судя по тем-же комментариям (а также последовавшей статье о загрузке данных в PostgreSQL) многими она была понята не так, как я на то рассчитывал. По большей части, виноват в этом я сам, поскольку, в процессе упрощения изложения материала, оторвался от жизни настолько, что задача перестала быть понятна окружающим (это, в свою очередь, негативно сказалось на понимании причин выбора методов, использованных для ее решения).

Сегодня, я хочу исправить допущенные ошибки. Я расскажу о реальной задаче обработки данных SNMP-мониторинга, уделяя максимальное внимание техническим подробностям. Я постараюсь обосновать выбор подходов для ее решения и сравнить их производительность. Также, я уделю внимание тем техническим моментам, которые могут вызвать сложности у новичков. Прежде чем двигаться дальше, я хочу выразить свою признательность DenKrep, xlix123, zhekappp и всем прочим товарищам, давшим невероятное количество полезных советов, в процессе обсуждения предыдущей статьи.
Читать дальше →

Custom Annotation Preprocessor — создание на базе Android-приложения и конфигурация в IntelliJ IDEA

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

Недавно передо мной встала задача написания своих кастомных аннотации и их обработки во время компиляции. Первый вопрос, который я себе задала: с чего начать? После анализа я решила поделиться с вами ответом на этот вопрос.
Думаю, рассказывать, что такое аннотации в java и с чем их едят, не имеет смысла, так как каждому юному программисту это знакомо ( а кому не знакомо, может прочесть самостоятельно). К тому же на хабре есть интересная ознакомительная статья об этом явлении.
Но сегодня я хочу поговорить именно о кастомных аннотациях в Android-приложении, которые обрабатываются в процессе компиляции проекта вашим собственным обработчиком и о автогенерации классов на их основе. А так же, по ходу дела, расскажу вам, как быстро все настроить в IDEA (сама я пользуюсь версией 12.1, возможно в других есть отличия).
Читать дальше →

Высокопроизводительный SUN/ONCRPC сервер на Java NIO

Время на прочтение6 мин
Охват и читатели7.1K
В статьe о dCache рассказано о том, как использовать его в качестве NFS сервера. Но функциональной совместимости с существующими клиентами недостаточно, чтобы системой можно было пользоваться. Производительность тоже должна быть на высоте. Рабочей лошадкой NFS протокола является ONCRPC протокол. В dCache мы используем собственную реализацию, основанную на grizzly nio framework.

Немного истории для молодых

ONC RPC (Open Network Computing Remote Procedure Call) — протокол, созданный Sun Microsystems в конце 80х и опубликован в 1995г вместе с NFSv2. ONCRPC получил быстрое распространение и широко использовался, пока в начале 2000 не был вытеснен модными альтернативами, как CORBA, SOAP, а позже REST и JSON-RPC. Тем не менее, ONCRPC всё ещё используется, где простота и скорость важнее моды — в сетевых файловых системах.

Реализация


Чтобы не изобретать очередной велосипед, вначале мы использовали реализацию Remote Tea, но вскоре столкнулись с ограничениями, которые не могли легко решить: IPv6, GSSAPI, NIO. Так что велосипед пришлось изобретать, но не с нуля. Мы максимально сохранили совместимость с RemoteTea и адаптировали уже написанный код.

Подробности реализации

JUG в каждый город

Время на прочтение3 мин
Охват и читатели4.3K
JUG button
Java User Groups (JUGs) – это волонтерские организации Java-разработчиков призванные объединить Java-программистов, пользователей Java и IT-компании. Обычно объединенные по географическому признаку, например Московское сообщество Java-разработчиков или Белорусская Java User Group. Они предоставляют место встречи для пользователей Java, чтобы обмениваться информацией, обсуждать проблемы и решения из мира Java и, прежде всего, пить пиво, есть пиццу и получать удовольствие.
Как создать свой JUG и зачем это надо, читаем ниже

FindBugs против CDK

Время на прочтение4 мин
Охват и читатели15K
Мне всегда интересно читать посты от PVS-Studio о том, как они ищут баги в каком-нибудь опенсорсном проекте. Я решил, что я тоже смогу написать такой пост, только про Java. Существует совершенно замечательный бесплатный статический анализатор Java-кода FindBugs. О нём на удивление мало писали на Хабре.

Помимо анализатора кода для такой статьи требуется подопытный кролик. Нужен довольно большой проект, но при этом не настолько распространённый, чтобы разработчики идеально вылизывали код. Я выбрал проект Chemistry Development Kit (версия 1.4.19), которым доводилось пользоваться. FindBugs я установил как плагин к Eclipse, потому что мне так привычнее.


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

JavaFX WebView (HTML/JS) — используем web практики для разработки desktop приложений

Время на прочтение7 мин
Охват и читатели43K
image
Базовым UI фреймворком для нашего приложения был выбрана JavaFX. JavaFX прекрасно показала себя. В этой же статье мы хотели сконцентрироваться на одном компоненте JavaFX — WebView.

При разработке нашего приложения — интерфейса COLT — мы использовали набирающий популярность среди девелоперов подход, когда часть компонентов UI реализуется на JavaScript/HTML.
Читать дальше →

JavaFX, HelloWorld + CSS + FXML. Окончание

Время на прочтение9 мин
Охват и читатели34K
HelloWorld из примера, предложенного Oracle в «Getting Started with JavaFX», на ПК с Windows. Преображение окна ввода логина и пароля с помощью CSS, создание формы на FXML, а также использование CSS в FXML'овой форме. Снова командная строка и тонкости, о которых нам не рассказали в туториале.

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

Непрактичные сортировки – бессмысленные и беспощадные

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

А что это мы всё об умных да об эффективных алгоритмах? А давайте эту тоскливую осеннюю пятницу развеем чем-нибудь контрпродуктивным!?

Представляю Вашему вниманию ТОП-5 самых нетрадиционных сортировок всех времён и народов.

Младопрограммистам такое полезно показывать в дидактических целях. Всех остальных как минимум позабавит.
Начнём

Каркас для Event-Driven программирования

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

Немного лирики


image
Чем дольше я программирую, тем больше мне нравятся слабосвязанные системы, которые состоят из большого числа разрозненных единиц (модулей), ничего не знающих друг о друге, но предполагающих существование других. Такие системы в идеале должны собираться подобно конструктору, без зависимостей и без адаптирования друг к другу. В идеале, в процессе работы такой системы, все необходимые задачи должны выполняться без остановки системы, простым введением нового модуля в мир (скажем, вбросом jar'ника в classpath), и система немедленно начнет взаимодействовать с новым модулем.
В связи с этим, очень привлекательно выглядит парадигма event-driven (или Событийно-ориентированное) программирование.
Читать дальше →

Java vs Go

Время на прочтение6 мин
Охват и читатели39K
Последнее время язык Go стал очень обсуждаемым, и довольно часто его сравнивают с Java. Неделя Go принесла нам очень интересную ознакомительную статью Dreadd, и мне стало интересно, как справится с описанной задачей Java.
По мере написания кода стало понятно, что и в Java тоже есть много интересного, но мало освещённого в прессе. Я постарался использовать самые интересные нововведения из Java7, надеюсь тут найдут полезную информацию как начинающие, так и опытные, но ленивые Java разработчики.
Почитать чужой код

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

Java Stored Procedure в субд Oracle на примере формирования PDF-файла

Время на прочтение4 мин
Охват и читатели20K
Всем доброго времени суток!
Недавно имел опыт создания функций (хранимых процедур) на языке Java в СУБД Oracle (Java Stored Procedures). Постараюсь описать шаги по созданию таких функций, расмотрев пример работы с pdf-файлом.

Вот, что для этого потребуется:
  • СУБД Oracle (в моем случае версии 10)
  • библиотеки iText (версия 1.4.8)
  • Java-код, реализующий требуемые функции

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

Игра в стартап на семинарах по Java

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

Иллюстрация HttpSession в момент работы с куками
Эта статья обязана своим появлением новому требованию к курсу «Углублённое программирование на Java», который я веду в Технопарке Mail.Ru в МГТУ им. Баумана. Это требование было сформулировано в начале лета и звучало примерно так: «Ещё больше практики!».
Читать дальше →

JavaFX, HelloWorld — продолжение

Время на прочтение6 мин
Охват и читатели26K
HelloWorld из примера, предложенного Oracle в «Getting Started with JavaFX», на ПК с Windows. Развитие простейшего приложения до окна ввода логина и пароля. По-прежнему с использованием командной строки с приоткрытием недоговоренностей туториала, в котором приведен код этого приложения.

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

А знаете ли Вы, что возвращает .getClass()?

Время на прочтение2 мин
Охват и читатели113K
Я думаю, почти любого Java разработчика когда-то спрашивали на собеседовании: «Какие есть методы у класса Object?»
Меня, по крайней мере, спрашивали неоднократно. И, если в первый раз это было неожиданностью (кажется, забыл про clone), то потом я был уверен, что уж методы Object'а-то я знаю;)

И каково же было мое удивление, когда спустя несколько лет разработки я наткнулся на собственное незнание сигнатуры метода getClass()

Под катом пара слов про Class, .class, .getClass и, собственно, сюрприз, на который я наткнулся.
Читать дальше →

Что я не ожидал увидеть в тесте Java Programmer I (1Z0-803)

Время на прочтение3 мин
Охват и читатели41K
Здесь нету примеров идеального кода, пяти шагов «как получить сертификат с вероятностью 100%, гарантия». Нету даже фотографий котиков :/
Читать дальше →

System.exit(). Какой код выхода использовать?

Время на прочтение2 мин
Охват и читатели65K
Что является причиной того, что java программа прекращает любую свою активность и завершает свое выполнение? Основных причин может быть 2 (JLS Секция 12.8):

  • Все потоки, которые не являются демонами, выполнены;
  • Какой то из потоков вызывает метод exit() класса Runtime или же класса System и
    SecurityManager дает добро на выполнение exit().

В обоих случаях в процессе завершения работы JVM передает своему родительскому процессу (процессу который запустил JVM) код выхода — значение типа int, на основании которого родительский процесс может делать выводы об успешности или не удачности выполнения поставленных перед JVM задач.
Читать дальше →

Алгоритм распределения данных в кластере серверов в dCache

Время на прочтение2 мин
Охват и читатели4.8K
В продолжение статьи о dCache расскажу о некоторых деталях внутренней реализации.

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

Показать, как это сделано в dCache