• Создаём процедурные глобусы планет

    • Translation
    Искажения, бесшовный шум и как с ними работать.

    image

    Генерируем планету


    Один из простейших способов генерации планеты — использование шума. Если мы решим выбрать его, то у нас есть пара возможных вариантов. Давайте рассмотрим каждый и определим лучший:

    • Шум Перлина (Perlin Noise) — самый простой вариант. Шум Перлина был разработан Кеном Перлином в 1983 году, он имеет пару недостатков — визуальные артефакты и довольно низкая по сравнению с другими вариантами скорость при генерации больших изображений.
    • Симплекс-шум (Simplex Noise) — разработан Кеном Перлином в 2001 году как попытка устранения недостатков шума Перлина; это вполне достойное и быстрое решение, однако обладающее серьёзным недостатком: использование трёхмерного симплекс-шума защищено патентом, что делает его довольно дорогостоящим.
    • Открытый симплекс-шум (Open Simplex Noise) — был разработан KDotJPG с одной простой целью: создать современную и бесплатную версию симплекс-шума, относительно быструю и без искажений.

    Из этих трёх лично я предпочитаю Open Simplex Noise, который использую в своих личных проектах. Стоит заметить, что в текущей реализации OpenSimplexNoise для получения простого доступа к масштабу, октавам и порождающим значениям потребуется дополнительная работа. В Интернете есть множество информации о том, что делает каждый из этих элементов, и я крайне рекомендую вам её изучить. Однако в своей статье я буду говорить не об этом.
    Читать дальше →
    • +38
    • 6.3k
    • 7
  • Конференция BLACK HAT. Уроки выживания при DDOS-атаке 300 Гбит / с. Часть 2

    • Translation
    Конференция BLACK HAT. Уроки выживания при DDOS-атаке 300 Гбит / с. Часть 1

    Интересным в этой атаке было то, что нас не решились атаковать прямо, а пошли по цепочке наших провайдеров. Они принялись атаковать upstream-провайдеров, расположенных выше CloudFlare, и источник атаки действительно находился в Лондоне. Сначала я не был в этом уверен, но поскольку Spamhaus тоже находился в Лондоне, возможно, хакер тем самым хотел поставить их в постыдное положение. Как я говорил, техническим вдохновителем атаки вроде бы был подросток из Лондона, возможно, таким образом он мог более эффективно отследить эффект своей атаки. На этом слайде показан маршрут BGP трафика, который включал в себя максимум 30 транзитных узлов next-hop.



    Я скрыл расширения адресов лондонского провайдера широкополосной связи, последний hop – это один из IP-адресов Spamhaus, их было несколько в нашей сети. Вы видите, как маршрутизировался трафик, по приведенным данным сложно определить точный путь, однако он был направлен к нашему оборудованию в Лондоне, куда попал спустя 17 миллисекунд после прохождения пограничного IP-адреса нашей сети, которая работала в Лондоне.
    Читать дальше →
    • +18
    • 4.6k
    • 3
  • Увеличь это! Современное увеличение разрешения


      Я уже перестал вздрагивать и удивляться, когда звонит телефон и в трубке раздается жесткий уверенный голос: «Вас беспокоит капитан такой-то (майор такой-то), вы можете ответить на пару вопросов?» Почему бы не поговорить с родной полицией…

      Вопросы всегда одни и те же. «У нас есть видео с подозреваемым, пожалуйста, помогите восстановить лицо»… «Помогите увеличить номер с видеорегистратора»… «Здесь не видно рук человека, пожалуйста, помогите увеличить»… И так далее в том же духе.

      Чтобы было понятно о чем речь — вот реальный пример присланного сильно сжатого видео, где просят восстановить размытое лицо (размер которого эквивалентен примерно 8 пикселям):


      И ладно бы только русские дяди Степы беспокоили, пишут и западные Пинкертоны.
      Читать дальше →
    • Конец халяве: I Know What You Download

      Продолжение (часть 2).
      Не понимаю, почему никто не кричит «полундра» (поискал здесь и на Хабре по слову «iknowwhatyoudownload», но ничего).

      Итак, некий сайтик iknowwhatyoudownload.com по IP-адресу показывает список торрентов, скаченных и розданных с этого адреса.
      Судя по всему, запустились недавно. Домен зарегистрирован 14 сентября 2016. Отображается статистика примерно за месяц. Но как долго она собиралась, неизвестно.
      Читать дальше →
    • CraSSh: ломаем все современные браузеры вычислениями в CSS

      • Translation
      Автор статьи: Константин Сафонов

      Не хочу читать эту техническую болтовню. Просто повали уже мой браузер.

      Что такое CraSSh


      CraSSh — это кроссбраузерная чисто декларативная DoS-атака, основанная на плохой обработке вложенных CSS-функций var() и calc() в современных браузерах.

      CraSSh действует во всех основных браузерах на десктопах и мобильных устройствах:

      • На движке WebKit/Blink — Chrome, Opera, Safari, даже Samsung Internet на смарт-телевизорах и холодильниках.
        • Android WebView, iOS UIWebView также затронуты, то есть можно обвалить любое приложение со встроенным браузером.
      • На движке Gecko — Firefox и его форки, такие как Tor Browser.
        • Servo не запустился ни на одной из моих машин, поэтому я его не протестировал.
      • На движке EdgeHTML — Edge в Windows, WebView в приложениях UWP (их вообще кто-нибудь использует?)

      Браузер IE не затронут, поскольку он не поддерживает функции, на которых основана атака, но у его пользователей немало своих проблем (вероятно, этот браузер можно порушить другими способами — прим. пер.).
      Читать дальше →
    • Конференция BLACK HAT USA. Как Голливудский хакер использует камеры наблюдения. Часть 2

      • Translation
      Конференция BLACK HAT USA. Как Голливудский хакер использует камеры наблюдения. Часть 1

      Мы можем также использовать эту ошибку для получения или замены зашифрованного пароля администратора, который хранится в /etc/privpasswd.



      Мы можем вытянуть содержимое из этого файла. Как видите, в нём находится имя пользователя root и зашифрованный пароль.



      На данный момент у нас есть 2 варианта: можно попробовать расшифровать пароль с помощью такого инструмента, как John the Ripper:



      Если это не сработает, черт с ним – у нас есть root, и мы просто перезапишем этот файл. В любом случае мы получаем доступ к «админке», и так же, как и в случае с предыдущей камерой, снова будем иметь права как администратора, так и root-пользователя.



      Эти уязвимости имеют место в большинстве камер IQ InVision, включая 3 и 7 серии, серию Sentinel, Alliance-Pro, Alliance-MX и Alliance-Mini. Я не стану перечислять все модели, иначе останусь тут навсегда, весь перечень этих камер имеется в интернете в списке Shodan Dork. Печально то, что, как известно, камеры этого производителя широко используются в школах, полицейских участках, банках, казино, финансовых и консалтинговых компаниях, службе DHL и так далее.

      Я посмотрел, что на сегодня самой дорогой камерой является модель N5072 компании 3SVision. Её цена обозначена фразой «Свяжитесь с нами», так что я сразу понял, что не могу себе её позволить. С этой камерой у меня были некоторые проблемы, потому что для всех остальных камер я мог просто зайти на сайт производителя, скачать прошивку и проанализировать код на предмет уязвимостей. Мне не нужно было покупать устройство, по крайней мере, для того чтобы провести начальное тестирование.
      Читать дальше →
      • +16
      • 6.1k
      • 7
    • Написание шейдеров в Unity. GrabPass, PerRendererData

      Привет! Я хотел бы поделиться опытом написания шейдеров в Unity. Начнем с шейдера искажения пространства (Displacement/Refraction) в 2D, рассмотрим функционал, используемый для его написания (GrabPass, PerRendererData), а также уделим внимание проблемам, которые обязательно возникнут.

      Информация пригодится тем, кто имеет общее представление о шейдерах и пробовал их создавать, но мало знаком с возможностями, которые предоставляет Unity, и не знает с какой стороны подступиться. Загляните, возможно, мой опыт поможет вам разобраться.


      Читать дальше →
      • +53
      • 17.5k
      • 8
    • Проблема Небраски

      • Translation
      image

      Кейси Муратори — один из программистов игры The Witness. В процессе разработки игры он публиковал в своём блоге посты о технических задачах, которые перед ним вставали. Ниже представлен перевод одного из таких постов.

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

      Поэтому когда я работаю над чем-нибудь, я рефлексивно начинаю рассматривать скрывающиеся за этим причины. И высаживание травы тоже не стало исключением.

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

      Вопрос «почему» в этом случае достаточно прост: почему мы используем для размещения травы синий шум?
      Читать дальше →
    • Основы оптимизации кода игр

      • Translation
      image

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

      Оптимизация ради игроков и собственного психического здоровья


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

      Основы оптимизации кода


      На самом деле есть довольно малое количество оптимизаций, которые почти всегда можно использовать для повышения скорости игры. Большинство из них не привязано к конкретной платформе (некоторые движки и фреймворки учитывают их), поэтому ниже я покажу примеры на псевдокоде, чтобы вы знали, с чего начинать.
      Читать дальше →
      • +16
      • 13.2k
      • 7
    • Антипаттерны тестирования ПО

      • Translation

      Введение


      Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или языке программирования.

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

      Терминология


      К сожалению, в тестировании пока не выработали общую терминологию. Если спросить сотню разработчиков, в чём разница между интеграционным, сквозным и компонентным тестом, то получите сто разных ответов. Для этой статьи ограничимся такой пирамидой тестов:


      Если не видели пирамиду тестов, настоятельно рекомендую ознакомиться с ней. Вот некоторые хорошие статьи для начала:

      Читать дальше →
    • Как перестать быть демиургом и поручить создание сущностей PowerShell


        Когда новый сотрудник выходит на работу, обычно мало просто создать ему аккаунт в Active Directory: нужно включить его в группы безопасности, создать личную папку на сетевом диске, почтовый ящик, добавить аккаунт в ERP\CRM систему… Все это частично решается копированием аккаунта, но тогда нужно еще вовремя вспомнить и правильно настроить атрибуты Active Directory.


        Но есть и более изящные варианты решения задачи. Так что, если вам надоело создавать аккаунты вручную ― приглашаю под кат.

        Читать дальше →
      • SSO и Kibana: интеграция Kibana со встроенной аутентификацией Windows (Single Sign-On)

        В этой статье мне хотелось бы поделиться способом настройки технологии единого входа (SSO) в Elastic Stack, использующим X-Pack для аутентификации пользователей и разграничения доступа к данным.


        Stop SSO

        Читать дальше →
        • +13
        • 7.3k
        • 2
      • Yum, шпаргалка



        Шпаргалка по работе с пакетным менеджером Yum (Yellowdog Updater, Modified), который используется в популярных Linux дистрибутивах: RedHat, CentOS, Scientific Linux (и других). В целях экономии места вывод команд не представлен.

        Оглавление


        Команды
        Опции Yum
        Пакет Yum-Utils
        Конфигурационные файлы
        Плагины
        Работа через прокси
        Читать дальше →
      • WPA2-Enterprise, или правильный подход к безопасности Wi-Fi сети

          В последнее время появилось много «разоблачающих» публикаций о взломе какого-либо очередного протокола или технологии, компрометирующего безопасность беспроводных сетей. Так ли это на самом деле, чего стоит бояться, и как сделать, чтобы доступ в вашу сеть был максимально защищен? Слова WEP, WPA, 802.1x, EAP, PKI для вас мало что значат? Этот небольшой обзор поможет свести воедино все применяющиеся технологии шифрования и авторизации радио-доступа. Я попробую показать, что правильно настроенная беспроводная сеть представляет собой непреодолимый барьер для злоумышленника (до известного предела, конечно).

          Читать дальше →
        • Внезапный диван леопардовой расцветки

            Если вы интересуетесь искусственным интеллектом и прочим распознаванием, то наверняка уже видели эту картинку:


            А если не видели, то это результаты Хинтона и Крижевского по классификации ImageNet-2010 глубокой сверточной сетью

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

            Это вообще довольно любопытный результат, если задуматься. Потому что… скажем, вы знаете, как отличить одного большого пятнистого котика от другого большого пятнистого котика? Я, например, нет. Наверняка есть какие-то зоологические, достаточно тонкие различия, типа общей стройности/массивности и пропорций тела, но мы же все-таки говорим о компьютерном алгоритме, которые до сих пор допускают какие-то вот такие достаточно глупые с человеческой точки зрения ошибки. Как он это делает, черт возьми? Может, тут что-то связанное с контекстом и фоном (леопарда вероятнее обнаружить на дереве или в кустах, а гепарда в саванне)? В общем, когда я впервые задумался над конкретно этим результатом, мне показалось, что это очень круто и мощно, разумные машины где-то за углом и поджидают нас, да здравствует deep learning и все такое.

            Так вот, на самом деле все совершенно не так.
            под катом пятна
          • Анатомия программы в памяти

            • Translation
            Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

            Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

            image

            Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:
            Читать дальше →
          • Безопасное динамическое обновление записей на MS DNS из Linux

            Введение


            В процессе настройки клиентов службы AD под управлением ОС Ubuntu Linux, я столкнулся с несвоевременным обновлением записей на DNS сервере средствами Samba, а также с некорректной работой команды «net ads dns register». Что вызывает сопуствующие проблемы при работе с доменными компьютерами.

            Например, наличие двух DNS серверов в dhclient.conf приводит к появлению ошибки «ERROR_DNS_GSS_ERROR» после выполнения «net ads dns register -P».

            В поисках решения этой проблемы я перечитал много статей и баг-репортов, и наткнулся на статью Warlock_ua «Безопасное динамическое обновление DNS записей в Windows домене из Linux (GSS-TSIG)». Идея показалась мне интересной. Но мне не понравилось решение с созданием отдельной учетной записи пользователя домена, которая имеет права на изменение всех записей DNS-зоны. Во-первых, это потенциально небезопасно. Во-вторых, в Windows уже существуют готовое решение: каждая учетная запись компьютера имеет право изменять свою запись на DNS. Почему бы этим не воспользоваться?

            За основу я взял скрипт learn-address.sh от Warlock_ua, и доработал его с учетом своих нужд.
            Читать дальше →
            • +12
            • 12.1k
            • 2
          • Я не верблюд или чересчур бдительный Google

            Однажды, скучая дома на выходных, пришла в голову идея написать приложение для игрового сообщества, в котором я состою. Когда код был написан, протестирован, все устраивало в работе — пришло время публиковать в Play Store. Для меня всегда было проблемой нарисовать графику. Поэтому я все взял с нашего форума. Нажал кнопочку «паблиш», и через 10 минут моё приложение было в бане!

            История под катом.
            Читать дальше →
          • Легко переходим на векторный формат картинок вместо нарезки под разные плотности экранов в Android 4.0+. Часть 1 из 2



              Обычно дизайн приложения рисуется в векторном редакторе (например, Sketch), но типичным форматом картинок в приложении под Android является растровый (как правило, PNG). При разработке приложения необходимо для каждого векторного изображения заниматься утомительной работой по изготовлению набора растровых картинок для разных плотностей экранов. Количество таких комплектов может доходить до шести по числу возможных плотностей: ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi (плотность xxxhdpi необходима только для иконки приложения). При верстке иногда приходится задать в разметке явные размеры для изображения, что может потребовать перемасштабирования растровой картинки, а это, в свою очередь, наверняка приведет к появлению артефактов. К тому же наличие нескольких комплектов картинок отрицательно сказывается на размере выходного apk.
              Читать решение...