Рубрика «java» - 171

image

Как правило, статьи о кешировании начинаются за здравие, а заканчиваются LRU кешем. Попробуем переломить эту тенденцию? Начнем с того, чем LRU плох, а закончим за здравие. Я надеюсь.

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

Спрашивая на собеседованиях какие алгоритмы кеширования вы знаете — как правило слышишь в ответ, ммм… LRU Cache… Зато если спросить про алгоритмы сортировки, вероятность услышать что-то помимо «Пузырек» — значительно выше. Человек готов потратить несколько дней на поиск оптимальной библиотеки ресайза изображений или веб фреймворка, не понимая, что реализовав эффективный кеш, он может взять в принципе любую библиотеку со схожими характеристиками, так как кеш — минимизирует обращения к ней, сгладив разницу в быстродействии.

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

Не все кеши одинаково полезны

Хороший пример LRU Cache.

На конкурсы алгоритмов его обычно не берут. Никто не хочет иметь ничего общего с неудачником. Сложно придумать более неэффективный алгоритм. Единственный алгоритм, у которого LRU Cache выигрывает по эффективности — это, наверно, просто очередь, например, FIFO. Тем не менее, LRU встроен везде и всюду как дефолтный и, к сожалению, часто единственный алгоритм, так как он прост в реализации.

Вам хотелось бы пользоваться сайтом, приложением или операционной системой, которая тормозит, неэффективна и жрет ресурсы как не в себя, но зато она написана на простом в реализации языке, например, условном бейсике? Если нет — добро пожаловать под кат.
Читать полностью »

1. Введение в реактивное программирование

Разрабатывая сложное приложение под Android со множеством сетевых соединений, взаимодействием с пользователем и анимацией — означает писать код, который полон вложенных обратных вызовов. И по мере развития проекта такой код становится не только громоздким и трудно понимаемым, но также сложным в развитии, поддержке и подвержен множеством трудноуловимым ошибкам.

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

RxJava — реализация ReactiveX с открытым исходным кодом на Java. Базовыми строительными блоками реактивного кода являются Observables и Subscribers. Подробнее с базовой основой можно ознакомиться в статье Грокаем* RxJava, часть первая: основы.

RxAndroid — расширение к RxJava, которое позволяет планировщику запускать код в основном и дополнительных потоках Android приложения и обеспечивает передачу результатов из созданных дополнительных потоках в основное для агрегации и взаимодействия с интерфейсом пользователя.
С целью более полного понимания основных принципов реактивного программирования рассмотрим практический пример для платформы Android. И начнем с настройки окружения для разработки.
Читать полностью »

Новый рейтинг языков программирования от IEEE Spectrum оказался своебразным - 1

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

А что, если с ростом всевозможных индексов, списков и рейтингов усилятся споры между самими исследователями? На что будут ссылаться они в своей аргументации?

Журнал IEEE Spectrum представил общественности плод коллективного труда – новый рейтинг языков программирования.

Постоянные лидеры рейтинга не упали с пьедестала, однако без сюрпризов все-таки не обошлось.
Как пишет издание, у исследователей не было возможности «посмотреть через плечо каждого программиста» и увидеть, какой язык он использует. Поэтому они пошли другим путем: исследовали чаты, open source сообщество, а также объявления о вакансиях. Рейтинг также учитывает результаты поиска в Google, Twitter, GitHub, StackOverflow, Reddit, Hacker News, CareerBuilder, Dice. Кроме того, в рейтинге отражены данные собственной цифровой библиотеки Institute of Electrical and Electronics Engineers (Институт инженеров электротехники и электроники) – Xplore Digital Library.Читать полностью »

Недавно была опубликована информативная статья Мэтта Уильямса о Java в Docker и существующих ограничениях памяти. Автор поднимает интересную тему о скрытой проблеме ограничения памяти, с которой пользователи могут столкнуться во время работы с контейнерами.

Большое количество репостов и лайков показывает, что данная тема довольно популярна среди Java-разработчиков.image

Поэтому хотелось бы более подробно проанализировать данную проблему и определить возможные пути ее решения.

Проблема

Мэтт описывает свое ночное «путешествие» в контейнере Docker со стандартным поведением памяти JVM. Он обнаружил, что ограничения RAM отображаются некорректно внутри контейнера. В результате, приложение Java, или любое другое, видит общий объем ресурсов оперативной памяти, выделенной для всей хост-машины, а JVM не может указать, сколько ресурсов было предоставлено родительскому контейнеру для работы. Это приводит к ошибке OutOfMemoryError, вызванной неправильным поведением динамической памяти JVM в контейнере.

Фабио Кунг, из Heroku, подробно описал основные причины возникновения этой проблемы в своей недавней статье "Память внутри контейнеров Linux. Или почему в контейнере Linux не работает free и top?"

Большинство инструментов Linux, предоставляющих метрики ресурсов системы, были созданы в то время, когда cgroups еще не существовали (например: free и top, как у procps). Они обычно читают метрики памяти из файловой системы proc: /proc/meminfo, /proc/vmstat, /proc/PID/smaps и других.
Читать полностью »

Сообщество экспертов, совместная работа над проектами и другие обновления платформы FlyElephant - 1

Команда FlyElephant рада анонсировать релиз платформы FlyElephant 2.0, в который вошли следующие обновления: внутреннее сообщество экспертов, совместная работа над проектами, публичные задачи, поддержка Docker и Jupyter, новое хранилище данных и работа с HPC кластерами.

FlyElephant — платформа для исследователей данных, инженеров и ученых, которая предоставляет готовую вычислительную инфраструктуру для проведения высокопроизводительных вычислений и рендеринга, помогает находить партнеров и совместно работать над проектами, а также управлять всеми ресурсами из одного места. Платформа состоит из 3-х основных компонентов:

  • Compute. Быстрый доступ к вычислительному кластеру в облаке с нужным программным обеспечением или HPC кластеру, а также автоматизация проведения расчетов.
  • Collaborate. Совместная работа над проектами и сообщество экспертов, где можно найти партнеров, чтобы вместе решить сложную задачу или получить квалифицированную консультацию.
  • Manage. Управление лицензиями, программным обеспечением, вычислительными ресурсами, шаблонами, алгоритмами, данными и результаты в одном месте.

Среди нововведений отметим следующие:
Читать полностью »

Scripto — замена стандартному JavaScriptInterface - 1

Приветствую пользователей Хабра. Наверное, многие из более менее опытных пользователей слышали про JavaScriptInterface — «мостик» между Java и JavaScript, при помощи которого можно вызывать Java методы. У JavaScriptInterface есть несколько довольно значимых недостатков:

1) Методы вызываются не в UI-потоке, а в специальном потоке Java Bridge, который нельзя забивать, иначе WebView перестанет отвечать.
2) При обращении к UI из методов, вызванных при помощи JavaScriptInterface, ничего не происходит, что может привести к нескольким часам дебага у незнающих разработчиков. Как решение, приходится использовать метод runOnUi или хендлеры.
3) Невозможно передавать пользовательские типы данных

Вызов JS-функций стандартным способом происходит так:

myWebView.loadUrl("myFunction('Hello World!')");

Минус данного подхода в том, что вызов функции — это, фактически, строка, и при передаче аргументов всех их нужно конвертировать в String.

Столкнувшись с этими проблемами в одном из своих проектов, в котором Java и JavaScript взаимодействуют очень тесно, я решил написать библиотеку облегчающую вызовы JS из Java и наоборот.Читать полностью »

14 и 15 октября в Санкт-Петербурге состоится Java-конференция Joker 2016. Уже сейчас понятно, что конференция знатно преобразится: не только в масштабах и форме, но и в содержании.

Joker 2016 Release Notes: 100 технических сессий за 2 дня - 1

Самое важное здесь при всех нововведениях сохранить атмосферу Joker. Атмосферу энтузиазма и доброжелательного фанатизма, продуктивных холиваров и кулуарных обсуждений.

Читать полностью »

Что помогло языку Java «войти в каждый дом» - 1
Изображение сайта vanillajava.blogspot.com

Кто-нибудь думал, что язык Java, первоначально предназначенный для устройств бытовой электроники, станет использоваться во многих других областях?

Расширение влияния Java, как ни странно, началось с разработки браузеров.

Главный разработчик Java Джеймс Гослинг перешел в Sun в 1984 году из исследовательского отдела IBM. До Java Гослинг разработал не имевший коммерческого успеха оконный интерфейс NeWS и GOSMACS — первую реализацию текстового редактора EMACS на языке С.

После этого Гослинг и его коллеги начали изучать перспективы на рынке электроники и бытовой техники.
«Группе была поставлена задача создать распределенную систему, которую можно было бы в качестве современной программной технологии продавать производителям бытовой электроники», вспоминает Гослинг.Читать полностью »

Доброго времени суток. Речь пойдёт об инструменте тестирования производительности СХД, изначально разработанного в недрах компании EMC для внутренних нужд, но имеющем свойство плавно разрастаться. Кстати, буквально «вчера» мангуст получил статус OpenSource проекта. А это значит, что пришло время немножко рассказать о нём. Итак, что же это за зверь?

image
Читать полностью »

Давно не писал настольных приложений на Java вообще и с использовании Swing в частности. Однако, возникла необходимость немного по GUIть. В качестве инструмента выбрал IntelliJ IDEA Community edition, 2016.1 версии.

Взялся ваять и, естественно, первое, на что налетел — хотя со времён Borland Java Builder 2006 воды утекло немало, экранные интерфейсы создавать проще не стало, скорее наоборот. А одной из причин выбора IDEA было как раз наличие Swing дизайнера «из коробки», однако как им пользоваться с ходу решительно непонятно — форма генерится, класс создаётся, создаются переменные контролов из дизайнера… но и только: при создании нашего класса форма на экране не появляется
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js