Обновить
256K+

Java *

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

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

Реализация функциональности многоуровневого undo/redo на примере прототипа электронной таблицы

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

Введение


Кнопки «Undo» и «Redo», позволяющие отменить и вернуть обратно любые пользовательские действия, а также посмотреть в списке перечень всех выполненных действий, являются стандартом де-факто для таких приложений, как текстовые процессоры и среды разработки, редакторы графики и САПР, системы редактирования и монтажа звука и видео. Они настолько привычны для пользователя, что последний воспринимает их наличие как данность, всего лишь одну функциональную возможность наряду с десятками других. Но с точки зрения разработчика требование к наличию undo является одним из факторов, влияющих на всю архитектуру проекта, определяемую на самых ранних стадиях проекта разработки.

Функции undo в приложениях LibreOffice и GIMP

В открытых источниках существует довольно мало информации о том, как практически реализовывать функциональность undo/redo. Классическая книга Э. Гаммы и др. «Приёмы объектно-ориентированного программирования. Паттерны проектирования» коротко упоминает о пригодности для этой цели паттерна «команда», в интернете на эту тему много общей информации, но нам не удалось найти достаточно полного, проработанного примера реализации. В нашей статье мы попытаемся восполнить этот пробел и, основываясь на опыте автора, продемонстрировать подробный пример архитектуры приложения, поддерживающей undo/redo, который может быть взят за основу других проектов.
Читать дальше →

Отличные типы данных в языке «Автор»

Время на прочтение4 мин
Охват и читатели3.8K
В интерпретаторе «Автор» существует три отличных от других, классических, языков типа данных, про которых я хочу рассказать в этой статье, а именно «digit», «graf» и «program». Они отвечают, соответственно, за астрономические числа без плавающей точки, универсальный граф и дерево операторов и вызовов функций с переменными и константами.

Следующий пример демонстрирует основное отличие типа «digit» от типа «int».
Читать дальше →

Обнаружение + Zabbix API под Java

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

  • вручную через интерфейс Zabbix;
  • используя «Обнаружение» Zabbix;
  • используя API Zabbix.

Добавление множества новых узлов вручную – рутинная задача, на решение которой уходит уйма времени. Хорошо, если новых узлов будет 5 – 10. А если 50 – 100 и больше? В этом случае вам поможет «Обнаружение». Настроив правила обнаружения и действия для обнаруженных узлов, Zabbix сам создаст новые обнаруженные узлы, подключит необходимые шаблоны, переместит созданный узел в нужную группу. Данный способ имеет недостаток.


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

Список технических и IT конференций 2016. Часть #2

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

Продолжая предыдущий пост (т.к. по результатам голосования победили те, кто хотел продолжения), собрал список интересных конференций за Июнь-Август 2016 + внес ваши пожелания.

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

Новая Java-конференция от JUG.ru в Новосибирске

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


В субботу, 19 марта, мы впервые проведем Java-конференцию в Новосибирске. Называться она будет JBreak. Вот её сайт.

Доклады будут проходить параллельно в трех залах, так что скучать будет некогда. Всего будет около 20 докладов продолжительностью по 50-60 минут каждый.

Почему Новосибирск?


Как многие из вас знают, за плечами у JUG.ru уже аж 6 Java-конференций — по 3 раза мы провели Joker и JPoint. Сначала это был Питер, а с 2014 года — и Москва.

Наши спикеры и участники давно говорили нам, чтобы мы сделали что-нибудь в Сибири. Мол, ехать в Питер или Москву из Сибири далеко и дорого, а Java-хардкора хотят не только в этих ваших столицах.Впервые этот разговор зашел за спикерским ужином после JPoint 2014, когда эту идею в явном виде озвучили нам Лёша Шипилев и Никита pjBooms Липский. Мол, Новосибирск — огромный город, в нем много джавистов, в нем сильная компиляторная школа, а главное, много людей, которым нужна сильная Java-конференция.

Поначалу мы отреагировали на это предложение без особого энтузиазма. Команда у нас была небольшая (я, real_ales и jetliner) и сил делать конференцию в далеком для нас городе мы в себе тогда не видели. А нынче погляди в окно многое изменилось. Наша команда выросла, укрепилась и наконец созрела. В какой-то момент мы смотрели гугловую аналитику на сайтах JUG.ru, Joker и JPoint и обнаружили, что в Новосибирске интерес к нашей деятельности действительно довольно велик: Top 5 городов выглядел так: Москва, Питер, Киев, Минск, Новосибирск. Стало понятно: нужно делать конфу в Новосибе!

В чем же особенности новой конференции?
Читать дальше →

Знакомьтесь: Jack и Jill на платформе x86

Время на прочтение3 мин
Охват и читатели13K
Jack (Java Android Compiler Kit) – это компилятор, преобразующий исходный код на Java в DEX-файлы Android. Jack – это набор инструментов, среди его возможностей – переупаковка, сжатие, обфускация и поддержка множественных DEX-файлов.

В Jack используются промежуточные библиотеки в формате .jack. Преобразованием существующих .aar/.jar файлов в этот формат занимается Jill (Jack Intermediate Library Linker).



Если для сборки используется Jack, то сначала Jill конвертирует внешние библиотеки, используемые в проекте, в .jack-файлы. Это подготавливает библиотеки к быстрому слиянию с другими .jack-файлами на следующем этапе, когда Jack и плагин Android Gradle, используя подготовленные ранее.jack-файлы и исходный Java-код, компилируют DEX-файл (или файлы). В ходе этого процесса Jack может выполнить минификацию кода (сжатие, обфускацию, или и то и другое вместе). На выходе получается APK-файл Android-приложения.
Читать дальше →

Записывайтесь на новые онлайн-курсы от Mail.Ru Group на Stepic

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


В конце прошлого года мы в партнерстве со Stepic запустили бесплатные онлайн-курсы по дисциплинам из программ Технопарка, Техносферы и Технотрека. А сегодня мы спешим порадовать вас запуском ещё двух:

  • Разработка веб-сервиса на Java (часть 2) — запуск 12 февраля.
  • Веб-технологии — запуск 18 февраля.
Читать дальше →

Пишем чат на Vert.x 3

Время на прочтение23 мин
Охват и читатели30K
На Хабре не так уж много статей, посвященных Vert.x, раз, два и обчёлся. Поэтому решил внести свой вклад и опубликовать небольшой урок, в котором рассказано, как написать простой чат с помощью Vert.x 3.


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

Как в Spring logger получить

Время на прочтение3 мин
Охват и читатели22K
Разрабатывая приложения используя IoC-контейнер Spring думаю каждый задумывался, а как же «правильнее и красивее» создать логгер. В данной публикации хочу привести несколько примеров решения данной задачи.

Решение 1


Получаем логгер напрямую через LoggerFactory:
@Component
public class MyBean {
    private static final Logger log = LoggerFactory.getLogger("application");
    ...
}

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

Список технических и IT конференций 2016. Часть #1

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

Прошло уже почти полтора месяца 2016 года Думаю, что это время, вы точно так же, как и автор данной заметки, провели в ратных трудах. Не смотря на колоссальную загрузку, не хотелось бы, пойти путем Булата Окуджавы, и оторвавшись в очередной раз от монитора, увидеть на календаре 1е Январь 2017. Возникает закономерный вопрос — как с максимальной пользой, не только проработать, оставшиеся 10,5 месяцев года Обезьяны, но и по максимуму узнать о новейших тенденциях, попутно познакомившись с интересными людьми.

Выполняя эту задачу и было проведено небольшое исследование, посвященное самым, на мой взгляд, интересным конференциям, на которые стоит обратить внимание и, при возможности, посетить c Марта по Май 2016.
Читать дальше →

Построение стакана котировок (FullOrderBook) по историческим данным

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


Совсем недавно решал задачу построения стакана котировок на основе исторических данных Московской Биржи. В открытых источниках ничего подобного не нашел, пришлось начинать с нуля и копать самому. Есть некоторые нюансы, о которых нужно знать. Про них буду упоминать по ходу.

Про биржевую торговлю, инфраструктуру и тестирование алгоритмов на исторических данных много писал и пишет IT Invest, спасибо ему. От себя добавлю, что на данных OrderLogs мы анализируем глубину рынка, ликвидность, спреды и еще много чего. Результаты используем в наших торговых алгоритмах.

Специально выбрал Фондовый рынок, так как тут больше всего вопросов. Валютный и Срочный рынок имеют свои особенности, но там проще. Реализация алгоритма на Java, код на GitHub.

Цель: Получить стакан котировок на любой момент времени.
Читать дальше →

Анализ Android малвари-матрешки

Время на прочтение10 мин
Охват и читатели17K
После написания статьи про анализ малвари с avito, несколько моих twitter-читателей откликнулись и прислали SMS, которые получили после публикации объявлений на avito.


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

Пишем собственный шлюз для Thrift API

Время на прочтение14 мин
Охват и читатели13K
Микросервисы, как ни крути, — наше всё. Можно сопротивляться SOAP 2.0 сколь угодно долго, но рано или поздно или они придут за тобой и обратят в свою веру, или ты придёшь к ним сам и попросишь крестить себя огнём и мечом. Как и у любого архитектурного решения, у микросервисов есть свои минусы. Одним из них является необходимость в каждый микросервис включать какую-то логику по авторизации запросов от внешних систем или других микросервисов. Эта логика может быть напрямую «зашита» внутри микросервиса (и не важно, что это отдельная библиотека), делегирована другому микросервису, а может быть объявлена декларативно. Что значит декларативно? Например, можно договориться, что в каждый микросервис приходит особый HTTP-заголовок, или какая-то структура данных, в которой есть информация о пользователе, делающем запрос. И данным в этой структуре необходимо однозначно доверять. У всех трёх вариантов есть свои недостатки, но в рамках статьи мы разберём последний. Для его реализации обычно используется шаблон проектирования API Gateway:
image

Под катом все трудности реализации шаблона в условиях бинарного протокола передачи данных.
Хочу узнать

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

Исследование распространенной малвари под Android

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

Часто вирусы для android приходят к нам при помощи рассылок. Раньше это были СМС, а теперь еще и современные мессенджеры. Мне было интересно посмотреть, что же сейчас на рынке вредоноса, поэтому зарегистрировалась и подала пару объявлений на avito.
Читать дальше →

Oracle прекращает выпуск браузерного плагина Java

Время на прочтение1 мин
Охват и читатели36K
К концу 2015 года разработчики ведущих браузеров или убрали поддержку встроенных плагинов, или анонсировали такие планы. Например, Mozilla собирается отказаться от поддержки плагинов NPAPI, потому что большинство их функций сейчас доступно через стандартные WebAPI. Chrome блокирует плагины NPAPI с апреля прошлого года. Браузер Edge тоже не поддерживает плагины. Таким образом, во всех ведущих браузерах скоро вообще не будет встроенной поддержки Flash, Silverlight, Java и др.

В связи с этим компания Oracle объявила, что начиная с версии JDK 9 прекратит выпуск браузерного плагина Java. Он будет удалён из Oracle JDK и JRE в будущем релизе Java SE.

Вполне логично: если плагин не поддерживается браузерами, то зачем его разрабатывать?
Читать дальше →

Алексей Рагозин и Артём Панасюк о распределённом нагрузочном тестировании на jug.msk.ru

Время на прочтение3 мин
Охват и читатели6.8K
На очередной встрече jug.msk.ru, прошедшей 20 января 2016 года традиционно в офисе компании КРОК, Алексей Рагозин и Артём Панасюк представили доклад «Распределённое нагрузочное тестирование на Java». Краткий рассказ с подробностями встречи далее.


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

Конфигурация приложений с помощью github

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


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

Я видел много проектов, где конфигурация подкладывается в файловую систему в виде properties/json/xml файлов с непостижимыми уму переоределениями в момент загрузки. И что же на самом деле использует приложение становится ясно только после просмотра лог файлов компонента либо во время отладки.
Git как хранилище конфигурации...

Видео лучших докладов Java-конференции JPoint 2015 — Часть 2

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


Как многие из вас знают, в конце апреля в Москве JUG.ru проведет четвертую по счету конференцию JPoint. Любителей окунуться в океан Java-технологий ждут два увлекательных дня с морем общения и кучей докладов. Месяц назад я начал рассказывать о лучших докладах прошлогодней JPoint. Сегодня пришло время второй части.

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

Top 5 докладов JPoint 2015

Рекурсия. Занимательные задачки

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

В этой статье речь пойдет о задачах на рекурсию и о том как их решать.
image

Кратко о рекурсии


Рекурсия достаточно распространённое явление, которое встречается не только в областях науки, но и в повседневной жизни. Например, эффект Дросте, треугольник Серпинского и т. д. Один из вариантов увидеть рекурсию – это навести Web-камеру на экран монитора компьютера, естественно, предварительно её включив. Таким образом, камера будет записывать изображение экрана компьютера, и выводить его же на этот экран, получится что-то вроде замкнутого цикла. В итоге мы будем наблюдать нечто похожее на тоннель.

В программировании рекурсия тесно связана с функциями, точнее именно благодаря функциям в программировании существует такое понятие как рекурсия или рекурсивная функция. Простыми словами, рекурсия – определение части функции (метода) через саму себя, то есть это функция, которая вызывает саму себя, непосредственно (в своём теле) или косвенно (через другую функцию).

О рекурсии сказано много. Вот несколько хороших ресурсов:
Читать дальше →

OpenJDK 9 наконец-то портирован на iOS

Время на прочтение1 мин
Охват и читатели11K
Инструкции по сборке проекта под iOS уже были доступны уже в течение некоторого времени, однако у простых разработчиков как-то не получалось запускать что-то сложнее чем «здравствуй мир» на реальных девайсах.

40 Минут назад, некто Johan написал в рассылку mobile-dev@openjdk о том, что ему удалось запустить приложение использующее Gluon Charm (Material Design UI) в JavaFX (OpenJFX 9) в Java на iPad mini. На мой взгляд это существенно достижение!
Оригинал текста письма
Hi,
Thanks to the great instructions at
openjdk.java.net/projects/mobile/ios.html I have everything working
now on a real iPad.
I run an application using Gluon Charm (Material Design UI controls) on top
of JavaFX (OpenJFX 9) on top of Java on my iPad mini, so this is a
real-world complete stack.


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