Обновить
0
0
Владимир @kBaHt

Пользователь

Отправить сообщение

Ещё раз (надеюсь, последний) про double-checked locking

Время на прочтение4 мин
Количество просмотров54K
Статей про double-checked locking на Хабре было столько, что казалось бы ещё одна — и Хабр лопнет. Вот только по Java неплохие публикации: Реализация Singleton в JAVA, Правильный Singleton в Java, А как же всё-таки работает многопоточность? Часть II: memory ordering или вот замечательный пост от TheShade (слава web-archive!). В наши дни, наверно, каждый Java-разработчик слышал, что если используешь DCL, будь добр объявить переменную volatile. Найти сегодня в коде известных опенсорсных проектов DCL без volatile довольно трудно, но оказалось, что проблемы ещё не полностью решены. Поэтому я добавлю небольшую заметку по теме с примерами из реальных проектов.

Иногда складывается ощущение, что программисты не включают мозги и не пытаются понять, как что работает, а просто следуют простым и понятным правилам вроде «объяви переменную volatile, используй DCL, и всё будет хорошо». К сожалению, такой подход в программировании не всегда работает.
Читать дальше →

Справочник по синхронизаторам java.util.concurrent.*

Время на прочтение14 мин
Количество просмотров308K
Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
Читать дальше

Принцип наименьшего действия. Часть 2

Время на прочтение12 мин
Количество просмотров19K


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

Решение задачи о приближении иррациональных

Время на прочтение39 мин
Количество просмотров19K

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


В сборнике Арнольда есть следующая задача


38. Вычислить сумму:


$inline$ \frac{ 1 }{ 1\cdot2 } + \frac{1}{2\cdot3}+\frac{1}{3\cdot4}+...+\frac{1}{n(n+1)} $inline$
(с ошибкой не более 1% от ответа)


Ниже представлен алгоритм для вычисления частичных сумм этого ряда на языке Scheme (Lisp) в обыкновенных дробях


#lang racket
(define series_sum
 ( lambda (n)
  (if (= n 0) 0
    (+ (/ 1 (* n (+ n 1))) (series_sum(- n 1)))
  ) ) )
(series_sum 10)
(series_sum 100)
(series_sum 1000)
(series_sum 10000)
(series_sum 100000)
(series_sum 1000000)

(define series_sum_1
 ( lambda (n)
  (if (= n 0) 0 
    (+ (/ 1.0 (* n (+ n 1.0))) (series_sum_1(- n 1.0)))
  ) ) )
(series_sum_1 10)
(series_sum_1 100)
(series_sum_1 1000)
(series_sum_1 10000)
(series_sum_1 100000)
(series_sum_1 1000000)
Читать дальше →

Разбор основных концепций параллелизма

Время на прочтение17 мин
Количество просмотров78K
Всем кофе!

Завтра у нас плавненько стартует практически юбилейный поток курс «Разработчик Java» — уже шестой по счёту начиная с апреля прошлого года. А это значит, что мы снова подобрали, перевели интереснейший материал, которым делимся с вами.

Поехали!

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

РАЗДЕЛ 1

Вступление

С момента своего создания Java поддерживает ключевые концепции параллелизма, такие как потоки и блокировки. Эта памятка поможет Java-разработчикам, работающим с многопоточными программами, понять основные концепции параллелизма и способы их применения.

РАЗДЕЛ 2

Концепции

Концепция Описание
Atomicity (атомарность) Атомарная операция — это операция, которая выполняется полностью или не выполняется совсем, частичное выполнение невозможно.
Visibility (видимость) Условия, при которых один поток видит изменения, сделанные другим потоком

Таблица 1: Концепции параллелизма

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

Знакомство с реактивными потоками – для Java-разработчиков

Время на прочтение12 мин
Количество просмотров23K
Привет, Хабр!

Сегодня мы вернемся к одной из тем, затрагиваемых в нашей замечательной книге "Реактивные шаблоны проектирования". Речь пойдет об Akka Streams и потоковой передаче данных в целом — в книге Роланда Куна этим вопросам посвящены главы 10 и 15-17.
Читать дальше →

Как подписать сообщение алгоритмом ГОСТ Р 34.11/34.10-2001 на Java

Время на прочтение3 мин
Количество просмотров14K
В этот статье я расскажу, как подписать произвольное сообщение приватным ключом и сертификатом по алгоритму ГОСТ Р 34.11/34.10-2001 присоединённой (attached) подписью на языке Java.

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

Все найденные примеры или использовали стороннее платное ПО КриптоПро, или не собирались с современными версиями Java, или подписанные сообщения потом не валидировались.

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

JPoint 2018: разбор полётов

Время на прочтение6 мин
Количество просмотров5.7K
6-7 апреля 2018 года в Москве проводилась Java-конференция JPoint 2018. Далее представлен «разбор полётов» конференции, прошедшей при активной поддержке и участии популярного подкаста Разбор полётов: информация и впечатления о докладах, организации мероприятия, проиллюстрированные большим количеством фотографий.


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

Руководство по созданию собственных шейдеров в Unreal Engine

Время на прочтение12 мин
Количество просмотров26K
image

Благодаря системе нодов редактор материалов является отличным инструментом для создания шейдеров. Однако у него есть свои ограничения. Например, там невозможно создавать циклы и конструкции switch.

К счастью, эти ограничения можно обойти с помощью написания собственного кода. Для этого существует нод Custom, позволяющий писать код HLSL.

В этом туториале вы научитесь следующему:

  • Создавать нод Custom и настраивать его входы
  • Преобразовывать ноды материалов в HLSL
  • Изменять файлы шейдеров с помощью внешнего текстового редактора
  • Создавать функции HLSL

Чтобы продемонстрировать все эти возможности, мы воспользуемся HLSL для снижения насыщенности изображения сцены, вывода различных текстур сцены и создания гауссова размытия (Gaussian blur).
Читать дальше →

Туториал по Unreal Engine. Часть 7: звук

Время на прочтение12 мин
Количество просмотров64K

В видеоиграх под понятием «звук» подразумеваются музыка, диалоги и звуковые эффекты. В наше время игра без звука будет казаться небрежной и незавершённой.

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

В этой части туториала вы научитесь следующему:

  • Воспроизводить музыку и зацикливать её
  • Воспроизводить звуковой эффект в определённых точках анимации
  • Модулировать тон звука при каждом воспроизведении
  • Перемещать их регулировать громкость звука в зависимости его местоположения в 3D-пространстве
  • Управлять с помощью UI громкостью музыки и звуковых эффектов по отдельности
Читать дальше →

Планирование задач в Андроид

Время на прочтение4 мин
Количество просмотров45K

Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Schedule tasks and jobs intelligently in Android» от Ankit Sinhal.


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

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

World Machine + UE4: Полный рабочий процесс

Время на прочтение3 мин
Количество просмотров33K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи WorldMachine + UE4: Full Workflow.

Руслан Назиров показал, как можно создавать красивые ландшафты в World Machine и импортировать их в Unreal Engine 4. Руслан начал работать с Unreal Engine всего год назад, но уже сейчас демонстрирует удивительные результаты.

Процесс создания ландшафта для UE4


1. Создание нужного ландшафта в World Machine. Я использую библиотеку макросов GeoGlyph для ускорения процесса создания ландшафта.

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

Биология поведения человека: Лекция #10. Введение в нейронауки, I [Роберт Сапольски, 2010. Стэнфорд]

Время на прочтение2 мин
Количество просмотров7.6K

Представляем вам десятую лекцию курса «Биология поведения человека» Роберта Сапольски.
В этой лекции ассистенты Нейтан Вудлинг и Энтони Чанг-Минг в общих чертах расскажут о нейронауках и их связи с поведением человека. Они познакомят нас с долями головного мозга, его клетками, нейрофармакологией и обратным захватом.

Весь список уже переведённых на сегодняшний день лекций вы найдёте под катом.

Лекции Технотрека. Администрирование Linux

Время на прочтение4 мин
Количество просмотров146K


Представляем вашему вниманию очередную порцию лекций Технотрека. В рамках курса будут рассмотрены основы системного администрирования интернет-сервисов, обеспечения их отказоустойчивости, производительности и безопасности, а также особенности устройства ОС Linux, наиболее широко применяемой в подобных проектах. В качестве примера будут использоваться дистрибутивы семейства RHEL 7 (CentOS 7), веб-сервер nginx, СУБД MySQL, системы резервного копирования bacula, системы мониторинга Zabbix, системы виртуализации oVirt, балансировщика нагрузки на базе ipvs+keepalived. Курс ведёт Сергей Клочков, системный администратор в компании Variti.

5 курсов, которые помогут начать свой путь в дизайне игр

Время на прочтение2 мин
Количество просмотров35K
Это статья для тех, у кого появилось желание получить или улучшить навыки дизайна игр. В ней я приведу пять лучших, на мой взгляд, курсов на эту тему. Независимо от того, что именно вы хотите создавать – персонажей, окружения или пейзажи, – по каждому направлению вы найдете подробные видеоуроки со всей необходимой информацией.


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

Процедурная генерация планетарных карт

Время на прочтение6 мин
Количество просмотров16K
Речь пойдёт о картографии, имеющей дело с фантастическими мирами.

Положение дел с процедурной генерацией карт


На данный момент процедурная генерация карт это уже обширная тема получившая развитие, главным образом, в рамках гейм-индустрии. Существуют способы автоматической генерации различных типов карт от простых изображений в ролевых и экшен играх до tile-карт в стратегических играх. Первые дают представления о месте действия игры и отличаются маленьким охватом территории, вторые могут моделировать обширные области целых планет, но имеют малую детализацию.
Читать дальше →
2

Информация

В рейтинге
Не участвует
Откуда
Якутск, Саха (Якутия), Россия
Дата рождения
Зарегистрирован
Активность