Pull to refresh
2
0
Send message

Ста-ста-статтеринг, или откуда в игре берутся микрофризы и как с ними бороться

Reading time10 min
Views61K
Представьте себе: вот вы ждете новую часть вашей любимой игры и, наконец, она выходит. Специально под это дело вы обновили свой ПК: установили новейшие ЦП и ГП, увеличили объем оперативки и даже заменили жесткий диск на SSD. Теперь игра должна запускаться у вас гладко, как шелк, с первого же экрана загрузки и до самого конца.

Вот вы скачиваете себе ранее оплаченный предзаказ. Завершается установка, вы запускаете игру. Все идет хорошо: игра «летает» с частотой кадров 60 FPS. Или, во всяком случае, так говорит вам счетчик кадров в оверлее вашего ГП. Но что-то идет не так. Вы водите мышкой туда-сюда и замечаете, что игра… фризится.

Как это возможно? Какие еще фризы при 60 FPS?

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

Это не лаги. Не низкий фреймрейт. Это статтеринг. При высоких FPS и идеальной сверхбыстрой конфигурации.

Что это такое, откуда взялось и есть ли способ от него избавиться? Сейчас разберемся.

image
Total votes 26: ↑26 and ↓0+26
Comments29

Тонкости настройки CI/CD: как работает GitLab runner, когда использовать Docker-in-Docker и где пригодится Argo CD

Reading time18 min
Views22K


В конце 2020 года в «Слёрме» вышел бесплатный мини-курс и комплексный курс по CI/CD. Авторы курса инженер Southbridge Александр Швалов и старший системный инженер Tinkoff Тимофей Ларкин ответили на вопросы первых студентов.


В частности, обсудили:


  • Как работает GitLab runner: сколько задач берёт и сколько ресурсов потребляет, где его лучше размещать и как настроить шаринг между проектами?
  • Как настраиваются пайплайны для проектов в монорепозитории? А как в ситуации, когда для каждого микросервиса свой репозиторий?
  • Как бороться с тем, что во время сборки артефакта в Docker очень быстро забивается свободное место на диске?
  • Когда лучше использовать подход Docker-in-Docker?
  • Как организовать доставку и развёртывание сервисов в закрытые окружения заказчика?

Видео с ответами на вопросы смотрите на YouTube. Под катом — текстовая версия разговора.

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments10

2D-полупроводники спасут закон Мура?

Reading time3 min
Views8.4K


Использование дисульфида молибдена в качестве смазки известно с 17 века, когда переселенцы применяли его для смазывания осей тележек. С 1940-х годов вещество широко используется как компонент смазочных материалов. В природе дисульфид молибдена встречается в виде минерала — молибденита (на фото)

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

Группа учёных из Университета Нового Южного Уэльса (Австралия) и Калифорнийского университета в Лос-Анджелесе (UCLA) опубликовала описание технологии производства двумерных полупроводников, которые теоретически могут решить проблему.
Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments6

Конвертация целых чисел в interface{} в Go 1.15

Reading time2 min
Views2.7K
В релиз ноутах Go 1.15 я обнаружил следующую запись:
Конвертация малых целочисленных значений в интерфейс теперь происходит без аллокаций.
В этой небольшой заметке я расскажу в чем заключается оптимизация.
Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments6

GO Scheduler: теперь не кооперативный?

Reading time8 min
Views34K
Если вы читали release notes для версии GO 1.14, то возможно заметили несколько довольно интересных изменений в рантайме языка. Вот и меня очень заинтересовал пункт: «Goroutines are now asynchronously preemptible». Выходит что GO scheduler (планировщик) теперь не кооперативный? Что же, после прочтения по диагонали соответствующего proposal любопытство было удовлетворено.

Тем не менее, через некоторое время я решил более подробно исследовать нововведения. Результатами этих исследований и хотелось бы поделиться.

image
Читать дальше →
Total votes 59: ↑55 and ↓4+51
Comments9

Clean Architecture глазами Python-разработчика

Reading time10 min
Views29K
Привет! Меня зовут Евгений, я Python-разработчик. Последние полтора года наша команда стала активно применять принципы Clean Architecture, уходя от классической модели MVC. И сегодня я расскажу о том, как мы к этому пришли, что нам это дает, и почему прямой перенос подходов из других ЯП не всегда является хорошим решением.


Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments26

Проблемы архитектуры в больших проектах

Reading time7 min
Views8.3K

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


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


image

Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments2

Использование asyncio для создания асинхронных драйверов устройств на MicroPython v.1.12

Reading time43 min
Views13K
Изученая возможности MicroPython для своих целей натолкнулся на одну из реализаций библиотеки asyncio и, после недолгой переписки с Piter Hinch — автором библиотеки, понял, что мне необходимо глубже разобраться с принципами, базовыми понятиями и типичными ошибками использования методов асинхронного программирования. Тем более, что раздел для начинающих — как раз для меня.

Летом 2020 года вышло обновление этой библиотеки, описанное в asyncio v3, при наличии времени и заинтересованности непременно дополню перевод обновленного Руководства.


Это руководство предназначено для пользователей, имеющих разный уровень опыта работы с asyncio, в том числе содержит специальный раздел для начинающих.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Микробраузеры повсюду. Но что мы о них знаем?

Reading time8 min
Views23K

Рис. 1. Превью одной и той же страницы в iMessage (слева), Hangouts и WhatsApp (справа)

Если упомянуть любой URL в твите, на Slack-канале, в Telegram или WhatsApp — ссылка развернётся в превью. Оно даёт примерное представление, как выглядит настоящая веб-страница.

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

Вот основные факты о микробраузерах, которые должен знать каждый веб-разработчик.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments10

Разработка REST API — что такое Code First подход?

Reading time3 min
Views53K
Это четвертая статья в серии статей по REST API:


В этой статье мы продолжим знакомство с разработкой REST API и рассмотрим подход Code-First.

Разработка хорошего REST API важна для того, чтобы иметь хорошие микросервисы. Подход Code-First фокусируется на генерации контракта из кода. Это наилучший из возможных подходов?


Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments2

REST API — Что такое HATEOAS?

Reading time3 min
Views96K
Это пятая статья в серии статей про REST API:


В этой статье вы продолжите изучать REST API и узнаете о HATEOAS.

При просмотре веб-страницы вы можете просматривать данные на странице и выполнять с ними действия.

Как насчет REST API? Как правило, когда вы запрашиваете REST ресурс, вы получаете информацию о ресурсе обратно. Как насчет отправки операций, которые вы можете сделать с ресурсом в ответе?


Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments26

Планирование в Go: Часть I — Планировщик ОС

Reading time10 min
Views28K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Scheduling In Go: Part I — OS Scheduler» автора Билла Кеннеди, о том, как работает внутренний планировщик Go.

Это первый пост в серии из трех частей, который даст представление о механике и семантике, лежащей в основе планировщика в Go. Этот пост посвящен планировщику операционной системы. Начнем!

Внутренняя архитектура планировщика Go позволяет вашим многопоточным программам быть более эффективными и производительными. Важно иметь общее понимание того, как работают планировщики ОС и Go для правильного проектирования многопоточного программного обеспечения. Я опишу достаточно деталей, чтобы вы могли наглядно представить, как все работает, чтобы на практике принимать лучшие решения.
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments9

Грязные хаки ассемблера 6502

Reading time10 min
Views22K
В этой статье перечислены некоторые трюки, которые применяли участники моего маленького конкурса программирования Commodore 64. Правила конкурса были просты: создать исполняемый файл C64 (PRG), который рисует две линии, чтобы сформировать изображение ниже. Побеждал тот, чей файл меньше по размеру.


Конкурсные работы публиковались в открытых твитах и личными сообщениями, которые содержали только байты PRG-файла и хэш MD5.
Читать дальше →
Total votes 75: ↑74 and ↓1+73
Comments19

От 0% до 70% рынка: Как Google Chrome поглотил интернет?

Reading time26 min
Views44K

pac_chrome


В 2008 году Internet Explorer от Microsoft занимал почти 60% мирового рынка браузеров. Firefox от Mozilla тянулся далеко на втором месте, занимая примерно треть рынка. Google Chrome дебютировал 2 сентября 2008 года и занимая лишь 0,3%.


Спустя десятилетие Chrome уже захватил 70% браузерного пространства. Как Google вошли и стали доминировать в совершенно новом для себя секторе всего за десять лет?

Читать дальше →
Total votes 62: ↑43 and ↓19+24
Comments238

Тюнинг производительности запросов в PostgreSQL

Reading time8 min
Views30K
Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в PostgreSQL. Мои методы не является исчерпывающими, скорее учебником для тех, кто просто тащится от тюнинга.

Поиск медленных запросов


Первый очевидный способ начать тюнинг — это найти конкретные операторы, которые работают плохо.

pg_stats_statements


Модуль pg_stats_statements — отличное место для начала. Он просто отслеживает статистику выполнения операторов SQL и может быть простым способом поиска неэффективных запросов.

Как только вы установили этот модуль, системное представление с именем pg_stat_statements будет доступно со всеми своими свойствами. Как только у него будет возможность собрать достаточный объем данных, ищите запросы, которые имеют относительно высокое значение total_time. Сначала сфокусируйтесь на этих операторах.

SELECT *
FROM
  pg_stat_statements
ORDER BY
  total_time DESC;

user_id dbid queryid query calls total_time
16384 16385 2948 SELECT address_1 FROM addresses a INNER JOIN people p ON a.person_id = p.id WHERE a.state = @state_abbrev; 39483 15224.670
16384 16385 924 SELECT person_id FROM people WHERE name = name; 26483 12225.670
16384 16385 395 SELECT _ FROM orders WHERE EXISTS (select _ from products where is_featured = true) 18583 224.67

Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments7

Почему Senior Developer'ы не могут устроиться на работу

Reading time3 min
Views153K


Сначала о том, как 5 месяцев назад я проходил собеседование на работу. Меня посоветовал друг, и прошло уже немало времени, с момента как я ответил рекрутеру. Я был поражён, как сильно весь процесс изменился за последние 5 лет.


После первичного созвона меня отправили на сторонний сайт (HackerRank), чтобы я решил три небольших задачки за 1 час. Для меня это был первый подобный опыт. Первые две задачки были простыми, но третья оказалась посложней. Когда время подошло к концу, моё решение не проходило все тесты, а только где-то 8 из 10 необходимых.

Читать дальше →
Total votes 165: ↑151 and ↓14+137
Comments909

Достраиваем в RESTinio четвертый этаж из C++ных шаблонов. Зачем и как?

Reading time13 min
Views3K

RESTinio — это относительно небольшой проект, представляющий из себя встраиваемый в C++приложения асинхронный HTTP-сервер. Его характерной особенностью является широкое, можно сказать, повсеместное применение C++ных шаблонов. Как в реализации, так и в публичном API.


C++ные шаблоны в RESTinio используются настолько активно, что первая статья, которая рассказывала о RESTinio на Хабре, называлась "Трехэтажные C++ные шаблоны в реализации встраиваемого асинхронного HTTP-сервера с человеческим лицом".


Трехэтажные шаблоны. И это, в общем-то, была не фигура речи.


А недавно мы в очередной раз обновили RESTinio и для добавления новой функциональности в версию 0.5.1 пришлось сделать "этажность" шаблонов еще выше. Так что местами C++ные шаблоны в RESTinio уже четырехэтажные.



И если кому-то интересно зачем нам такое потребовалось и как мы шаблоны использовали, то оставайтесь с нами, под катом будет немного подробностей. Матерые C++ гуру вряд ли найдут для себя что-нибудь новое, а вот менее продвинутые C++ники смогут посмотреть на то, как шаблоны применяются для вставки/изъятия кусков функциональности. Почти что в "дикой природе".

Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments19

Об очень шпионском методе аутентификации

Reading time12 min
Views12K

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


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


Но как тогда им опознать своего товарища по штабу?


КДПВ


TL;DR — изобретаем механизм аутентификации пользователей с помощью стеганографии для воображаемого трехсимвольного агентства несуществующей страны.

Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments24

Тот, кто воскресил Duke Nukem: интервью с Рэнди Питчфордом, волшебником из Gearbox

Reading time33 min
Views15K
RUVDS совместно с Хабром продолжают проект, состоящий из серии интервью с интересными, на наш взгляд людьми в IT-среде. В прошлый раз мы познакомились с Ричардом (Levelord) Греем, дизайнером Duke Nukem, American McGee’s Alice и многих других популярных игр.

Сегодня представляем вашему вниманию интервью с Рэндаллом Стюардом «Рэнди» Питчфордом II. Рэнди — президент, исполнительный директор и сооснователь компании Gearbox Software.


Краткая справка: Питчфорд некоторое время работал в 3D Realms, где внёс вклад в разработку Duke Nukem 3D Atomic Edition и Shadow Warrior.

С Gearbox Software Питчфорд создал Half-Life: Opposing Force (за которую он получил награду от академии интерактивных искусств и наук, как за лучшую экшн-игру 2000 года на ПК), Half-Life: Blue Shift, Half-Life: Decay, Counter-Strike: Condition Zero, James Bond 007: Nightfire, Tony Hawk's Pro Skater 3 и Halo: Combat Evolved для ПК и конечно Borderlands.

В интервью принимали участие редактор Хабра Николай Землянский, Ричард (Levelord) Грей, супруга Рэнди Кристи Питчфорд и его сын Рэнди младший.
Total votes 44: ↑42 and ↓2+40
Comments3

Каркас API на Golang

Reading time8 min
Views27K

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


image


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

Читать дальше →
Total votes 19: ↑11 and ↓8+3
Comments34
1
23 ...

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity