Обновить
512K+

Java *

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

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

Параллельное программирование в Java8. Создание многопоточных программ с помощью Fork/Join Framework

Время на прочтение3 мин
Охват и читатели21K
Статья посвящена такому интересному и полезному механизму (совокупностям механизмов и библиотек), как Fork/Join Framework. Он позволяет многократно ускорить вычисления, добиться максимальных результатов при обработке, используя все доступные возможности системы (процессоры).

В рамках данной статьи будет созданы классы, использующие Fork/Join Framework. В коде показан один из возможных вариантов применения параллельного программирования. Итак, начнем.
Читать дальше →

Установка плагина onlyoffice-alfresco (контрольный лист — шпаргалка)

Время на прочтение2 мин
Охват и читатели8.8K
10 ноября 2015 стал доступен плагин для редактирования документов в Alfresco Share при помощи онлайн-редакторов OnlyOffice. Код плагина распространяется под лицензией GPL.
Читать дальше →

Критическая уязвимость в ряде Java Application Server

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

Вчера в блоге Apache FSF появилась интересная запись. Уязвимым оказалось практически все ПО, которое использует сериализацию и десереализацию данных совместно с apache commons collections и некоторыми другими библиотеками.
Сама уязвимость была описана 6 ноября, а сегодня Oracle выпустил первые патчи к WebLogic.

Кратко


Тип: Удаленное исполнение кода
Опасность: высокая
Уязвимое ПО: Oracle WebLogic, IBM WebSphere, JBoss, Jenkins, OpenNMS и другое ПО с commons collections в classpath.
Описание: Уязвимость позволяет злоумышленнику создать такой пакет сериализованных данных, который при распаковке заставит уязвимый сервер исполнить произвольный код.
Читать дальше →

Highload Dev Conf'2015 прошла 17 октября в Минске

Время на прочтение2 мин
Охват и читатели5.2K
17 октября прошла ежегодная брутальная конференция Highload Dev Conf.
Участниками стали более 300 суровых разработчиков, которым интересны высоконагруженные проекты и BigData.

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

Что нового и интересного в IntelliJ IDEA 15

Время на прочтение4 мин
Охват и читатели30K
На прошлой неделе JetBrains объявила о выходе IntelliJ IDEA 15. Как всегда, IDE доступна в двух редакциях: коммерческая Ultimate и бесплатная Community Edition. Скачать новую версию можно на официальном сайте JetBrains. Этот пост вкратце о том, что в ней нового и интересного.

image

Kotlin
Главная новость заключается в том, что одновременно с релизом IntelliJ IDEA 15 вышел и Kotlin Beta — практически готовый к релизу JVM язык программирования, разрабатываемый в недрах JetBrains. В IntelliJ IDEA 15 поддержка Kotlin доступна “из коробки”.

Отладчик
Популярность Java 8 продолжает набирать обороты, а JetBrains продолжает делать отладчик более удобным для работы с лямбда-выражениями. При добавлении точки останова IDE теперь позволяет выбрать конкретное выражение. Перейти в конкретное лямбда-выражение теперь можно и при помощи Step Into и Run to Cursor.

Также в отладчик был добавлен инструмент Force Return. Он позволяет прервать исполнение текущего метода и вернуть выбранное значение. Это может быть удобно, если вы хотите поменять логику выполнения программы без изменения кода и без перезапуска.

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

Веб-два-нольные ярлыки для Java

Время на прочтение5 мин
Охват и читатели7.7K
Когда мне понадобилось реализовать ярлыки для Java «как в веб-два-ноль», гугление не помогло найти ни одной библиотеки, содержащей в себе подобный тип коллекции.

Решил сделать сам.

Итак, нам надо хранить объекты в коллекции данного типа (назовем его, скажем, LabelsMultiMap). Как объекты, так и ярлыки могут быть произвольного типа. Количество ярлыков сверху не ограничено, равно как и количество объектов. Одним и тем же набором ярлыков могут быть описаны более 1 объекта. У одного объекта один ярлык может встретиться только 1 раз.

Пример валидных ярлыков:
Ярлыки Объекты
green, wooden, alive tree
green, wooden, lifeless bench
green, alive, croak frog

Коллекция должна позволять:

  1. put() — помещать в неё объекты со списком прикрепленных меток
  2. getValues() — возвращать объекты, содержащиеся в коллекции
  3. findValues() — осуществлять поиск объектов, ярлыки которых содержат запрашиваемый набор ярлыков
  4. findValuesOnlyIn() — осуществлять поиск только тех объектов, все ярлыки которых входят в запрашиваемый набор ярлыков

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

Универсальная функция toCamelCase() для Java

Время на прочтение3 мин
Охват и читатели11K
Сегодня мне понадобилось перевести строку произвольного содержания в camelCase.
В интернете в основном встретились узкоспециализированные методы, которые либо переводят только имена констант (по соглашениям Java, SOME_JAVA_NAMING_CONVENTION_CONST), либо только фразы, разделенные пробелами.
Мне этого категорически не хватало, нужна была бОльшая универсальность.

Как и подобает любому уважающему себя велосипедисту, я начал писать свой алгоритм, и немного увлёкся. Очнувшись от кода, я обнаружил, что функция переводит любые мною скормленные строки в нормальный camelCase или CamelCase.
Единственное, что она не делает — не запрещает цифры в начале получившейся строки (для соглашений JNC), но мне это и не нужно было (при необходимости дописывается одной строкой кода — пополнением ко второму, вложенному, условию).

Что получилось можете увидеть под катом.
Читать дальше →

Как обойтись почти без исключений, заменив их уведомлениями

Время на прочтение14 мин
Охват и читатели26K
Здравствуйте, Хабр.

Иногда попадаются статьи, которые хочется перевести просто за имя. Еще интереснее, когда такая статья может пригодиться специалистам по разным языкам, но содержит примеры на Java. Совсем скоро надеемся поделиться с вами нашей новейшей идеей по поводу издания большой книги о Java, а пока предлагаем ознакомиться с публикацией Мартина Фаулера от декабря 2014, которая до сих пор не была переведена на русский язык. Перевод сделан с небольшими сокращениями.
Читать дальше →

Создание плагина для Intellij IDEA. Заметки и мелкие советы

Время на прочтение4 мин
Охват и читатели25K
Полгода назад или около того я загорелся-таки идей написать свой плагин для Intellij IDEA. Согласно задумке, он должен был считать, сколько времени разработчик потратил на проект (всего, за день, за сеанс) и отображать результат на диаграмме. Никакой магии, но такая функция здорово помогла бы мне рассчитывать время работы.


И что из этого вышло?

Метод Гаусса на Java

Время на прочтение5 мин
Охват и читатели50K
Статья посвящена реализации алгоритма Гаусса для решения системы линейных алгебраических уравнений на языке Java.

Теоретические сведения


Рассмотрим математическую теорию. Система линейных уравнений может иметь одно решение, бесконечно много решений или же быть несовместной (не иметь решений). Не все методы решения СЛАУ могут справится с вторым случаем, когда система имеет бесконечно много решений. Например, метод Крамера и матричный метод не применимы, но метод Гаусса вполне можно использовать.

Алгоритм можно условно разделить на два этапа:

  • Прямой ход
  • Обратный ход

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

Реализация


Начнем с постановки задачи:

  • нам нужно создать программу, реализующую систему линейных уравнений в виде некоторой структуры данных, используя приемы обобщенного программирования. Система должна содержать коэффициенты производного типа от класса Number (т.е. Float, Integer, Double и т.д.)
  • Запрограммировать алгоритм, который получив на вход структуру данных системы образует нули ниже главной диагонали
Читать дальше →

GDG DevFest Нижний Новгород 2015

Время на прочтение2 мин
Охват и читатели4.6K
Привет, Хабрахабр! Конференция DevFest проходит уже несколько лет подряд в разных городах России и собирает большое количество участников: разработчиков, IT-специалистов, студентов IT-факультетов, преподавателей, всех, кому интересны технологии Google.



В этом году мы уже проводили DevFest в Воронеже (отчёт будет опубликован в ближайшее время), а ноябрьский слёт любителей технологий Google пройдёт в Нижнем Новгороде. Для IT-сферы этого города DevFest станет уникальным событием. Во-первых, в Нижнем Новгороде мы собираемся впервые, а во-вторых, в числе спикеров не только местные докладчики, но и авторитетные эксперты из других городов.
Читать дальше →

Высоконагруженное приложение на java

Время на прочтение4 мин
Охват и читатели30K
Хотелось бы добавить по поводу высоконагруженных систем на java относительно этой статьи. В комментариях писать слишком много, поэтому напишу отдельно. Подход не совсем программиста, но может кому пригодится. Это только мое мнение, возможно, оно где-то неверно.

Платформа JEE


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

Уличная магия в скриптах или что связывает Groovy, Ivy и Maven?

Время на прочтение9 мин
Охват и читатели11K
После мучений с отладкой сложных MVEL скриптов + MavenClassloader, обнаружил, что механизм динамического разрешения зависимостей есть в языке Groovy. К тому же отладка Groovy скриптов возможна и в Idea и в Eclipse.



Вы спросите зачем нужно динамическое разрешение зависимостей? Некоторые вещи проще делать так, а некоторые возможно только так.

В публикации вы найдете работающее решение для Groovy в виде одного jar файла и загрузчик классов из репозитариев maven для Java приложения. Узнаете про особенности работы Grape «из коробки». Чтобы не быть голословным и были понятны возможности Grape
Читать дальше →

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

Dagaz: На полпути

Время на прочтение18 мин
Охват и читатели5.3K
imageЧуть правее наклон — упадет, пропадет!
Чуть левее наклон — все равно не спасти!
Но спокойно, ему остается пройти
Всего две четверти пути!

        Владимир Высоцкий "Натянутый канат"
 
 
Когда фронт работ выглядит совершенно необозримым, его волей-неволей, приходится делить на мелкие куски. Кусочек, для первой итерации, я выбрал совсем небольшой:

Очень простые шашки
(board
   (name chess-board-10x10)
   (dim "a-j")
   (dim "10-1")
   (dir (name nw) -1 -1)
   (dir (name ne)  1 -1)
   (dir (name se)  1  1)
   (dir (name sw) -1  1)
)

(piece
   (name Man)
   (pre
      (check is-friend?)
      (take)
      (log position)
      (let captured 0)
   )
   (post
      (check (<= max-captured captured))
      (set! max-captured captured)
      (log " - " position)
      (drop)
   )
   (move
      (check (any nw ne))
      (check is-empty?)
   )
   (move
      (while true
         (let dir (any nw ne sw se))
         (check dir)
         (check is-enemy?)
         (capture)
         (inc! captured)
         (check dir)
         (check is-empty?)
         (end-move)
      )
   )
)

(game
   (name "Simple Checkers")
   (board chess-board-10x10)
   (players 
      (White (Man a1 c1 e1 g1 i1 b2 d2 f2 h2 j2 a3 c3 e3 g3 i3)) 
      (Black (Man b8 d8 f8 h8 j8 a7 c7 e7 g7 i7 b6 d6 f6 h6 j6))
   )
)


Даже без дамок! Фигуры двигаются вперёд и могут «бить» противника, по привычным нам правилам "Шашек" (перепрыгивая через фигуру). Дойдя до последней линии доски, они ни во что не превращаются, но могут брать фигуры противника, поскольку взятия «назад» разрешены. В этом отношении, разрабатываемая игра похожа на «Осетинские шашки», описанные в одной из предыдущих статей. Взятие обязательно и, из всех возможных ходов, игрок должен выбрать ход, берущий максимальное количество фигур. Игра завершается, когда один из игроков не может выполнить очередной ход (заперт или потерял все фигуры).

Разумеется, речь идёт не о том, чтобы «закодить очередные шашки» (это можно было бы сделать и с меньшими усилиями). Я хочу разработать «метаигровую» систему, позволяющую описывать достаточно сложные логические игры, используя простой DSL и, в идеале, не обладая продвинутыми навыками программирования (то есть, ровно то, что делает Zillions of Games, но в полностью открытом и кроссплатформенном проекте).
Читать дальше →

Анализ AST c помощью паттернов

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

Сейчас я работаю над senjin/gglsl — библиотекой для программирования шейдеров с помощью Groovy, о которой недавно писал.

Здесь я опишу три подхода к анализу AST (abstract syntax tree), все на примерах под-задач, вытекающих одна из другой и связанных общим контекстом: рекурсивные функции, паттерн Visitor, и паттерн-матчинг.
Паттерн-матчинг реализован на Java и доступен на GitHub.
Читать дальше →

Защита in-App Purchase iOS от ломалок с помощю сервера

Время на прочтение2 мин
Охват и читатели9.2K
Сегодня расскажу о том, как защитить in-app purchases в играх на мобильной платформе iOS с помощью собственного сервера. Практически все компании, которые выпускают свой продукт, заботятся о защищенности своих приложений и как можно больше пытаются защитить их от взлома. Одной из таких компаний является и та, в которой я работаю.
Читать дальше →

Сортировка массива без использования условных операторов

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

array.sort()

И все. Кому нужен вообще какой-то алгоритм. В задании было установлено ограничение от 0 до 100, мы же не лентяи, сделаем в общем виде, для любых значений и с повторениями чисел. Немного подумав, пришел вот к такому решению:
Читать дальше →

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

Время на прочтение7 мин
Охват и читатели143K
rxjava
В вводной статье мы рассмотрели преимущества реактивного подхода в программировании на Java, а также ситуации в которых библиотека Rx бывает более или менее полезной. В этой части мы рассмотрим основные типы, на которых базируется концепция реактивного программирования и несколько дополнительных классов, которые помогут нам в понимании принципов работы библиотеки.
Читать дальше →

Вышел JetBrains Toolbox со всеми обновленными десктопными продуктами

Время на прочтение2 мин
Охват и читатели33K
Хотя сегодня понедельник, у нас важный день — мы запустили JetBrains Toolbox, обновили все входящие в него десктопные продукты и начали продажи по новой лицензионной схеме.

Вкратце о каждом из продуктовых обновлений:

  • ReSharper Ultimate 10 — ReSharper Build для повышения эффективности сборки, непрерывное тестирование, профилирование со шкалой времени внутри Visual Studio, больше средств контроля за стилем кода, поддержка NUnit 3.0, полная поддержка C99, новые проверки, исправления и рефакторинги для C++, улучшенная поддержка JavaScript и TypeScript (в том числе регулярные выражения и синтаксис JSX/TSX), декомпиляция в IL-код.
  • IntelliJ IDEA 15 — новые возможности в отладчике, улучшенный пользовательский интерфейс, новые встроенные инструменты и интеграции, дополнительно улучшенная помощь при написании кода, поддержка Kotlin «из коробки».
  • PhpStorm 10 — улучшенная поддержка языка PHP, повышенное удобство редактирования, отладки, анализа кода и многие другие мощные возможности.
  • WebStorm 11 — поддержка
Читать дальше →

Дюк, вынеси мусор! — 3. CMS и G1

Время на прочтение10 мин
Охват и читатели188K
Часть 3 - CMS GC и G1 GC

Сегодня мы продолжаем цикл статей о сборщиках мусора, поставляемых с виртуальной машиной Oracle Java HotSpot VM. Мы уже изучили немного теории и рассмотрели, каким образом с кучей расправляются два базовых сборщика — Serial GC и Parallel GC. А в этой статье речь пойдет о сборщиках CMS GC и G1 GC, первостепенной задачей которых является минимизация пауз при наведении порядка в памяти приложений, оперирующих средними и большими объемами данных, то есть по большей части в памяти серверных приложений.

Два этих сборщика объединяют общим названием «mostly concurrent collectors», то есть «по большей части конкурентные сборщики». Это связано с тем, что часть своей работы они выполняют параллельно с основными потоками приложения, то есть в какие-то моменты конкурируют с ними за ресурсы процессора. Конечно, это не проходит бесследно, и в итоге они разменивают улучшение в части пауз на ухудшение в части пропускной способности. Хотя делают это по-разному. Давайте посмотрим, как.
Посмотреть, как