Pull to refresh
0
0

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

Send message

Лаги, джиттер и потеря пакетов: откуда берутся проблемы с неткодом и как их решать

Reading time11 min
Views62K

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

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

Читать далее
Total votes 27: ↑27 and ↓0+27
Comments20

Олды в ИТ

Reading time18 min
Views89K

Когда ты молод, ты «бессмертен» и не задумываешься о старости. Есть просто уверенность, что если много и хорошо работать, то твоя карьера и доходы будут неуклонно расти. Следуя этой стратегии, ты развиваешься в профессии уже 15, 20, 30 лет. За эти годы уже получил огромный опыт и, наверное, он обязательно поможет безбедно и интересно прожить остаток дней. Но все не так просто. Да, ты уже давно работаешь в хорошей компании, занимаешься интересными проектами, получаешь за это достойную зарплату, но в будущем уже не так уверен, как раньше. Профессиональный возраст приходит с массой вопросов, на которые нужно ответь стратегически.

 Эта статья родилась на основе обсуждения горячей темы «Олды в ИТ», которую 4 января 2021 г. мы записали для подкаста Linkmeup. Обязательно послушайте запись здесь или в любимом подкаст-приложении.

Читать далее
Total votes 188: ↑181 and ↓7+174
Comments435

Запускаем свой RTMP сервер для стриминга

Reading time4 min
Views74K


Иногда YouTube или Twitch не подходят как стриминговая платформа — скажем, если вы пилите портал с вебинарами или контентом 18+, нарушаете авторские права или хотите максимально отгородить свою трансляцию от остального интернета. У них есть много альтернатив как в виде сервисов (те же минусы, недостаток контроля и непредсказуемая политика), так и в виде self-hosted решений. Проблема опенсорсных стриминговых проектов в том, что все они начинаются с крохотной связки из пары технологий, а затем отчаянно пытаются вырасти в сервис, добавляя сложные веб-интерфейсы, чаты, библиотеки стримов и в конечном счёте отдаляясь от исходной цели: дать миру инструмент, который по понятному мануалу позволит запустить свой сервер трансляций. Что с ним будет дальше, в какие системы будет встроена эта картинка — это только ваше личное дело, а самописный аналог твича с лагающими и отваливающимися сервисами и периодически валящимся билдом не нужен никому, кроме его разработчиков. Поэтому в этой статье мы разберём минимальную цепочку действий для запуска своего RTMP-сервера с плеером.
Читать дальше →
Total votes 41: ↑39 and ↓2+37
Comments14

Пушка Гаусса

Reading time7 min
Views96K
Хомяки приветствуют обитателей третьей от солнца планеты.

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



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

Скорострельность такого устройства зависит от мощности преобразователя. Чем он будет мощней, тем быстрей сможет заряжать сборку конденсаторов.
Читать дальше →
Total votes 122: ↑119 and ↓3+116
Comments193

Реализация пользовательского ввода, не блокируещего выполнение программы

Reading time4 min
Views17K
Недавно у меня появилось немного свободного времени, поэтому я решил улучшить свои знания языка С. Пока что они ограничиваются уровнем простых институтских лабораторных работ и книгой С. Прата «Язык программирования C», поэтому для начала я поставил себе простую задачу — написать консольную змейку. К тому моменту, когда отображение игрового поля и самой змейки на экране и часть, отвечающая за передвижение ее по полю была написана, появилось две проблемы:
  • данные отправлялись программе только после нажатия Enter
  • программа останавливалась на считывании пользовательского ввода

Можно было решить их при помощи использования getch() из curses, но это было скучно и не интересно.
О том как были решены эти проблемы под катом.
Читать дальше →
Total votes 18: ↑9 and ↓90
Comments5

Как сделать ваш HTML отзывчивым, добавив одну строку кода на CSS

Reading time4 min
Views64K
Привет, Хабр! представляю вашему вниманию перевод статьи «How to make your HTML responsive by adding a single line of CSS» автора Per Harald Borgen.



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

Самое крутое, что для добавления отзывчивости потребуется написать одну строчку кода на CSS
Читать дальше →
Total votes 79: ↑69 and ↓10+59
Comments38

Как LLVM оптимизирует функцию

Reading time10 min
Views9.8K
Оптимизирующий AOT-компилятор обычно структурирован так:

  1. фронтенд, преобразующий исходный код в промежуточное представление
  2. конвейер машинно-независимой оптимизации (IR): последовательность проходов, которые переписывают IR для устранения неэффективных участков и структур, которые не могут быть непосредственно преобразованы в машинный код. Иногда эту часть называют middle-end.
  3. Машинно-зависимый бэкенд для генерации ассемблерного кода или машинного кода.



В некоторых компиляторах формат IR остаётся неизменным на протяжении всего процесса оптимизации, в других его формат или семантика меняется. В LLVM формат и семантика фиксированы, и, следовательно, возможно запускать проходы в любой последовательности без риска неверной компиляции или аварийного завершения работы компилятора.
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments12

Как JVM аллоцирует объекты?

Reading time16 min
Views35K

Как JVM создает новые объекты? Что именно происходит, когда вы пишете new Object()?


На конференциях периодически рассказывают, что для аллокации объектов используются TLAB'ы (thread-local allocation buffer): области памяти, выделенные эксклюзивно каждому потоку, создание объектов в которых очень быстрое за счет отсутствия синхронизации.


Но как правильно подобрать размер TLAB'а? Что делать, если нужно выделить 10% от размера TLAB'а, а свободно только 9%? Может ли объект быть аллоцирован вне TLAB'а? Когда (если) обнуляется выделенная память?
Задавшись этими вопросами и не найдя всех ответов, я решил написать статью, чтобы исправить ситуацию.


Перед прочтением полезно вспомнить как работает какой-нибудь сборщик мусора (например, прочитав этот цикл статей).

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

Заворачиваем весь трафик ОС в Tor

Reading time6 min
Views71K


Все описанное в статье реализовано в виде инструмента Toroxy, доступного на GitHub
В последнее время анонимность в сети является предметом горячих споров. Ни для кого не секрет, что данные о посещениях Интернет-ресурсов с локального устройства могут собираться на разных уровнях с целью построения «модели» пользователя, которая позже против него же и может быть использована (или могла бы). Поэтому не удивительно, что все большее количество активных пользователей Интернета становятся уверены в необходимости механизмов проксирования и анонимизации. В связи с этим появляется все больше новых VPN-клиентов, но, как показывает практика, далеко не всем из них по-настоящему можно доверять: то не все работает из коробки, то анонимизируется только HTTP-трафик, то качество реализации хромает, а то и вовсе разработчики грешат сливанием данных о своих пользователях.

В этой статье мы попробуем собрать из ряда программных компонентов собственный инструмент с UI, который бы позволил полностью анонимизировать трафик локальной системы и не допустить утечек по «прослушиваемым» каналам ни на одном из этапов работы.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments16

Swift under the hood: Generic implementation

Reading time6 min
Views9K
Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner. — Swift docs

Каждый, кто писал на Swift использовал дженерики. Array, Dictionary, Set — самые базовые варианты использования дженериков из стандартной библиотеке. Как они представлены внутри? Расмотрим, как данная основополагающая возможность языка реализована инженерами Apple.

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

Нейронаука: когда лучше всего работает наш мозг и как технологии могут ему помочь

Reading time5 min
Views9.5K


Вы полностью сосредоточены. Вы потеряли счет времени. Ничего другого в мире не существует. Вы живете в данный момент.

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

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

Наши коллеги поговорили с доктором Джеком Льюисом, нейробиологом, который с увлечением изучает, как работает наш мозг, чтобы узнать, что побуждает нас выполнять нашу работу наилучшим образом и какую роль в этом могут играть технологии, культура и рабочая среда.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments5

Управление светом: новый тип оптических элементов на базе метаматериалов

Reading time8 min
Views5.5K


Каждый день мы сталкиваемся с процессами и явлениями, которых даже не замечаем, а точнее, даже не видим. Какие-то из них мы понимаем, а какие-то нам лишь предстоит понять. Но пониманием чего-либо труды научного сообщества никогда не ограничивались, ведь человек всегда хотел не только понимать, но применять на практике свои знания, а это чаще всего означает только одно — контроль. Сегодня мы с вами познакомимся с исследованием, в котором ученые из Вашингтонского университета смогли создать новый метаматериал, способный манипулировать светом на нанометровом масштабе. Какие особенности их устройства, какой роль в этом сыграл труд Густава Ми, и какова практическая реализация этого новшества? Об этом мы узнаем из доклада исследовательской группы. Поехали.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments4

Inside The JeMalloc. Базовые Структуры Данных: Pairing Heap & Bitmap Tree

Reading time7 min
Views6.9K
image

Тема Аллокаторов частенько всплывает на просторах интернета: действительно, аллокатор — эдакий краеугольный камень, сердце любого приложения. В этой серии постов я хочу в подробностях рассказать о одном весьма занимательном и именитом аллокаторе — JeMalloc, поддерживаемый и развиваемый Facebook и используемый, например, в bionic[Android] lib C.

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

Под катом рассказываю о Pairing Heap и Bitmap Tree, формирующих фундамент JeMalloc. На данном этапе я не затрагиваю тему многопоточности и Fine Grained Locking, однако, продолжая серию постов, обязательно расскажу про эти вещи, ради которых, собственно, и создается разного рода Экзотика, в частности и та, что описывается ниже.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments1

Математика раскрывает секреты обратной связи живых клеток

Reading time10 min
Views7.4K

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




Небольшой Lego-робот Мустафы Хаммаша увлечён игрой в гляделки с книгой, которую держат в 30 см перед ним. Хаммаш сдвигает книгу вперёд, и робот сразу же начинает жужжать своими четырьмя колёсами, чтобы следовать за ней; он придвигает книгу поближе, и робот отскакивает назад, оставаясь на расстоянии в 30 см от книги. Хаммаш прижимает машину очёшником, наклоняет стол под углом, заменяет колёса на другие, на 30% больше – и каждый раз робот восстанавливает буферную зону в 30 см между книгой, и вновь начинает смотреть на неё.

Странная способность робота подстраивать своё местоположение даёт ему то, что биологи называют устойчивой идеальной адаптацией. «Когда движение заканчивается, никаких ошибок не наблюдается, — сказал Хаммаш, специалист по теории управления из шведского государственного технологического института в Цюрихе. — Это идеальная адаптация; она идеально поддерживает расстояние».
Total votes 22: ↑20 and ↓2+18
Comments8

Уравнение Навье-Стокса и симуляция жидкостей на CUDA

Reading time24 min
Views52K
Привет, Хабр. В этой статье мы разберемся с уравнением Навье-Стокса для несжимаемой жидкости, численно его решим и сделаем красивую симуляцию, работающую за счет параллельного вычисления на CUDA. Основная цель — показать, как можно применить математику, лежащую в основе уравнения, на практике при решении задачи моделирования жидкостей и газов.


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

Звуки для UI: подборка тематических ресурсов

Reading time3 min
Views21K
Рассказываем о площадках, где можно найти и скачать аудиосемплы для озвучки пользовательского интерфейса. Подборка пригодится тем, кто разрабатывает приложения или игры.

Другие наши подборки:


Total votes 26: ↑25 and ↓1+24
Comments2

Arend – язык с зависимыми типами, основанный на HoTT (часть 1)

Reading time21 min
Views9.6K
В данном посте мы поговорим о только что выпущенном JetBrains языке с зависимыми типами Arend (язык назван в честь Аренда Гейтинга). Этот язык разрабатывался JetBrains Research на протяжении последних нескольких лет. И хотя репозитории уже год назад были выложены в открытый доступ на github.com/JetBrains, полноценный релиз Arend случился лишь в июле этого года.

Мы попробуем рассказать, чем Arend отличается от существующих систем формализованной математики, основанных на зависимых типах, и о том, какая функциональность уже сейчас доступна его пользователям. Мы предполагаем, что читатель настоящей статьи в целом знаком с зависимыми типами и слышал хотя бы про один из языков, основанных на зависимых типах: Agda, Idris, Coq или Lean. При этом мы не рассчитываем, что читатель владеет зависимыми типами на продвинутом уровне.

Для простоты и конкретности наш рассказ об Arend и гомотопических типах будет сопровождаться реализацией на Arend простейшего алгоритма сортировки списков — даже на этом примере можно почувствовать отличие Arend от Agda и Coq. На Хабре уже есть ряд статей, посвященных зависимым типам. Скажем, про реализацию сортировки списков методом QuickSort на Agda есть вот такая статья. Мы будем реализовывать более простой алгоритм сортировки вставками. При этом основное внимание уделим конструкциям языка Arend, а не самому алгоритму сортировки.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments22

Сэмплирование с температурой

Reading time3 min
Views4.3K

Недавно натолкнулся на вопрос в чате ODS: почему алгоритм, генерирующий текст буква-за-буквой, сэмплит буквы не из p (вектор вероятностей следующей буквы, предсказанный языковой моделью), а из p'=softmax(log(p)/t) (где t — это ещё какой-то непонятный положительный скаляр)?


Быстрый и непонятный ответ: t — это "температура", и она позволяет управлять разнообразием генерируемых текстов. А ради длинного и детального ответа, собственно, и написан этот пост.

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

Как полиморфизм реализован внутри JVM

Reading time6 min
Views15K
Перевод данной статьи подготовлен специально для студентов курса «Разработчик Java».





В моей предыдущей статье Everything About Method Overloading vs Method Overriding (“Все о перегрузке и переопределении методов”) были рассмотрены правила и различия перегрузки и переопределения методов. В этой статье мы посмотрим, как обрабатывается перегрузка и переопределение методов внутри JVM.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments1

Разработка многозадачной микроядерной ОС — Планировщик

Reading time6 min
Views16K
После того, как вы прочитали базовые шаги по написанию Hello World ядра из цикла имеющихся на Хабре статей, самое время приступить к серьезной разработке самых базовых инструментов: аллокатора кучи и планировщика.

Важно:
1. Эта серия уроков для новичков. Цель — сформировать целостную картину мира. Очень долго у меня в голове была теория Таненбаума и я не мог ее связать с практикой. Тем у кого то же самое — посвящаю эту статью.
2. Код самый простой и тупой, но максимально понятный. Моя цель дать вам понимание чтобы вы смогли написать свое ядро, гораздо более крутое чем это.
3. Репо опубликую как только посчитаю его готовым для широкого круга. Я пишу небольшую часть, отлаживаю, и снимаю видеоурок. У меня нет готового продукта.

Честно говоря я долго думал стоит ли начинать писать статьи и делать видеоуроки на столь изьезженную тему. Но страсть к системному программированию и отсутствие структурированной информации на русском языке все же подтолкнули меня на этот эксперимент. Посему, если труд мой окажется востребованным, статьи планирую выпускать не реже чем раз в месяц и не чаще чем раз в неделю.
Total votes 51: ↑48 and ↓3+45
Comments40
1

Information

Rating
Does not participate
Registered
Activity