Обновить
@programmerjavaread⁠-⁠only

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

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

Эволюция переключения контекста x86 в Linux

Время на прочтение43 мин
Охват и читатели28K


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

Задача: проследить, как изменялось переключение контекста в ядре Linux от первой (0.01) до последней версии LTS (4.14.67), с особым акцентом на первую и последнюю версии.
Читать дальше →

Проектируем самодельный 16-битный CPU в 2023 году

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели29K

Для создания самодельного CPU требуется большое количество чипов логики. И в самом деле разумно, что для реализации регистров, счётчика команд, АЛУ и других компонентов CPU на логике TTL или CMOS действительно необходимо существенное число чипов. Но сколько конкретно?

Я попытался оптимизировать свой самодельный CPU, минимизировав количество чипов логики, чтобы ответить на вопрос: какое минимальное число интегральных схем требуется для полного по Тьюрингу CPU без CPU?

Мой ответ: для создания 16-битного последовательного CPU нужно всего 8 интегральных схем, включая память и тактовый генератор. Он имеет 128 КБ SRAM, 768 КБ FLASH и его можно разгонять до 10 МГц. Он содержит только 1-битное АЛУ, однако большинство из его 52 команд работает с 16-битными значениями (последовательно). На своей максимальной скорости он исполняет примерно 12 тысяч команд в секунду (0,012 MIPS) и, среди прочего, способен выполнять потоковую передачу видео на ЖК-дисплей на основе PCD8544 (Nokia 5110) с частотой примерно 10 FPS.
Читать дальше →

Почему WebAssembly плохо годится для Java

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели15K

Как разработчик TeaVM, компилятора байт-кода JVM в JavaScript и WebAssembly, я часто рекомендую пользователям, почему-то жаждущим сгенерировать WebAssembly, начать с JavaScript. Если честно, бэкэнд WebAssembly я очень давно не развиваю, не реализую в нём недостающих фич и не фикшу баги. Меня спрашивают: а почему так? Обычно, я просто игнорирую подобные вопросы, потому что в двух предложениях ответить на них невозможно, а для того, чтобы писать больше предложений, у меня нет времени. Обычно если я встречаю чьи‑то попытки объяснить, чем WebAssembly плох для реализации JVM (а так же, CLR, JavaScript и прочих динамических сред), то они сводятся к следующему: «Java (.NET, JavaScript, ваш вариант) — это управляемый язык со сборкой мусора и исключениями, так что приходится тащить с собой гигантский рантайм». Что же, на самом деле, ситуация несколько сложнее, а размер рантайма вовсе не такой страшный и не является основным источником бед.

Читать далее

Flutter: Почему использует язык Dart

Время на прочтение16 мин
Охват и читатели33K

Почему Flutter использует язык Dart? Основные преимущества языка Dart.

Сложность: Новичок.

Многие лингвисты считают, что естественный язык, на котором говорит человек, влияет на то, как он думает. Применяется ли та же концепция к компьютерным языкам? Программисты, работающие с разными языками программирования, часто предлагают совершенно разные решения проблем. В качестве более радикального примера, ученые-компьютерщики убрали оператор goto, чтобы поощрять более структурированные программы (не совсем тоже самое, что тоталитарные лидеры в романе "1984", удаляющие еретические слова из естественного языка, чтобы устранить мыслепреступления, но вы поняли идею).

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

Dart — главная причина, по которой разработчики любят Flutter.

Читать далее

Flutter for Web: гайд для начинающих

Время на прочтение8 мин
Охват и читатели38K

Изначально Flutter был известен как фреймворк для создания кроссплатформенных мобильных приложений для Android и iOS. Но концепция Flutter не ограничивается мобильной разработкой, фреймворк позволяет создавать пользовательские интерфейсы для любого экрана с помощью кроссплатформенной разработки: разрабатывать web и desktop-приложения. Мы в Friflex работаем на Flutter с момента выхода первой версии и хорошо знаем особенности фреймворка. В этой статье Никита Улько, Flutter fullstack developer в Friflex, рассказывает об особенностях разработки Flutter для Web. Если вы хотите попробовать Flutter для web, этот гайд для вас.

Читать далее

Создание оптимизированных образов Docker для приложения Spring Boot

Время на прочтение11 мин
Охват и читатели28K

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

В этой статье рассматриваются различные способы контейнеризации приложения Spring Boot:

- создание образа Docker с помощью файла Docker,

- создание образа OCI из исходного кода с помощью Cloud-Native Buildpack,

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

Читать далее

Запускаем Doom внутри PostgreSQL

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели23K

В статье разберём основные этапы создания расширения для PostgreSQL на языке C и как запустить внутри СУБД игру Doom.

Читать далее

Сжатие данных управляет Интернетом. Вот как это работает

Время на прочтение5 мин
Охват и читатели6.5K

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

Читать далее

Как правильно мерять производительность диска

Время на прочтение14 мин
Охват и читатели369K
abstract: разница между текущей производительностью и производительностью теоретической; latency и IOPS, понятие независимости дисковой нагрузки; подготовка тестирования; типовые параметры тестирования; практическое copypaste howto.

Предупреждение: много букв, долго читать.

Лирика



Очень частой проблемой, является попытка понять «насколько быстрый сервер?» Среди всех тестов наиболее жалко выглядят попытки оценить производительность дисковой подсистемы. Вот ужасы, которые я видел в своей жизни:
  • научная публикация, в которой скорость кластерной FS оценивали с помощью dd (и включенным файловым кешем, то есть без опции direct)
  • использование bonnie++
  • использование iozone
  • использование пачки cp с измерениема времени выполнения
  • использование iometer с dynamo на 64-битных системах


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

Как мерять правильно

Как ускорить работу PostgreSQL с помощью конфигурации базы и оптимизации запросов

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

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

Администратор баз данных в Southbridge и ведущий инженер компании Data Driven Lab Иван Чувашов занимается базами данных 15 лет и сегодня хочет поговорить про оптимизацию запросов. Разбирать все будет на примере PostgreSQL, так как именно с этой базой он сейчас работает плотнее всего.

Эта статья — конспект бесплатного вебинара об оптимизации PostgreSQL от «Слёрма». Если вам удобнее смотреть, а не читать, переходите на YouTube.

Читать далее

Потерянное искусство: художники золотого века игровых обложек

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели15K
image

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

Над оформлением обложек часто работали известные художники, талантливые иллюстраторы и комиксисты. Свои картины они рисовали на основе внутриигровой графики и геймплея. Цель была проста: изобразить дух игры на её обложке.

Подробно рассказываем о феномене и вспоминаем значимых художников, которые подарили свои рисунки хорошим играм.
Читать дальше →

Твердотельные накопители от Samsung оправданы. Проблема оказалась в ядре Linux

Время на прочтение2 мин
Охват и читатели39K


Помните перевод статьи «When Solid State Drives are not that solid»? В ней сотрудники компании Algolia возлагали вину за повреждение данных в конфигурации RAID0 на SSD от компании Samsung.

Проблема все таки была решена в результате долгого разбирательства, в ходе которого сотрудникам Algolia пришлось даже написать ПО, эмулирующее их тип нагрузки на RAID, чтобы инженеры Samsung смогли повторить проблему на своем оборудовании. Исправление коснулось ядра Linux, а точнее — файла bio.c, отвечающего за основные операции блочного ввода-вывода.
Читать дальше →

Откуда завод знает, что производить и когда

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели14K
image
Это слябы. Они смотрят на вас с одобрением

Привет с металлургического завода! У нас устроено так: все работают по плану, и на каждом уровне — свой вид планирования. На уровне завода это календарное планирование, а в цехе — графикование.

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

Для примера рассмотрим случай условного завода по производству кранов в Иванове, которым нужен листовой прокат разных сортаментов. Предположим, что и тем и другим он нужен 20 января. Это дата отгрузки, то есть прибытия на выход из производства поезда, который заберёт пару вагонов металла.

Это жёсткий дедлайн: к этому моменту прокат должен быть готов и ждать поезда. Но при этом он не должен ждать слишком долго, потому что это дорого, да и место на складе ограничено.

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

Чтобы 20 января прокат успешно уехал в Иваново, условно 19-го его надо оцинковать и нанести полимерное покрытие. То есть к 19 января у нас на складе должны быть зарезервированы вспомогательные материалы для этих операций, и их нужно заранее заказать и привезти. Чтобы было что цинковать, прокат нужно раскатать и порезать заранее, а чтобы было из чего раскатывать — предварительно выплавить слябы. Для всего этого и сопутствующих операций нужны мощности нескольких цехов: как минимум горячего проката, конверторного производства, холодного проката и покрытия.

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

Архитектура памяти: Erlang против Java

Время на прочтение4 мин
Охват и читатели13K
Я прочитал очень-очень интересную статью «Стратегии управления памятью для Erlang VM». Она была написана в качестве диссертации Джеспером Вильхельмсоном. Я подумал, что было бы неплохо обсудить различия между управлением памятью в Erlang и Java VM от Oracle.
Читать дальше →

Как построить систему, способную выдерживать нагрузку в 5 млн rps

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели67K

Всем привет! 

Меня зовут Владимир Олохтонов, я руковожу командой разработки в отделе Message Bus, который является частью платформы Ozon. Мы занимаемся разработкой самых разных систем вокруг Kafka, etcd и Vault. В этой статье я расскажу о том, как мы строили линейно масштабируемую gRPC-прокси перед Kafka, способную обслуживать миллионы запросов в секунду, используя Go.

Читать далее

Подписываем Android-приложение внутренним ключом Google Play для публикации в сторонних магазинах (RuStore, Huawei..?)

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели16K

В процессе публикации своего приложения в RuStore, я столкнулся с проблемой обновления сборки, первоначально-установленной из Google Play. Дело в том, что несколько лет назад, когда я размещал приложение в Google Play, я доверил управление ключами подписи Google App Signing. Это значит, что мой локальный ключ используется в качестве "загрузочного", а пользователи на устройства получают уже сборки, подписанные внутренним ключом Google. Прямого доступа к этому ключу нет, и, соответственно, я не могу подписать им сборку для RuStore для бесшовного обновления приложения.

Читать далее

Сбрасываем вес самым медленным и невероятно сложным способом

Время на прочтение4 мин
Охват и читатели63K

190 фунтов [~86 кг]

Я хочу сбросить 20 фунтов [~9 кг]. Какую часть массы Земли нужно «выбросить» в космос, чтобы достичь этой цели?

— Райан Мёрфи, Нью-Джерси

Задача выглядит довольно простой. Вес возникает потому, что гравитация Земли тянет нас вниз. Гравитация Земли возникает из-за её массы. Чем меньше масса, тем меньше гравитация. Убери массу с Земли — и ты сбросишь вес.

И ты решаешь попробовать сделать это.

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

Как выглядит край Вселенной?

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели78K

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

Но в одном мы уверены точно: у Вселенной есть край. Только не в пространстве, а во времени. Поскольку горячий Большой взрыв произошёл в известное, конечное время в прошлом — 13,8 миллиарда лет назад, с неопределённостью менее 1% — существует «край» того, как далеко мы можем видеть. Даже при скорости света, предельной космической скорости, существует фундаментальный предел того, как далеко назад мы можем заглянуть. Чем дальше мы смотрим, тем дальше назад во времени мы заглядываем. И вот что мы видим, приближаясь к краю Вселенной.
Читать дальше →

Профилирование, ассемблер и все-все-все

Уровень сложностиСложный
Время на прочтение19 мин
Охват и читатели6.7K

Привет, сегодня будет объёмная и обстоятельная статья о низкоуровневом профилировании и дигностике производительности. Многократно в комментариях к докладам и статьям пользователи высказывали пожелание увидеть не просто перечисление шаблонов "как нужно" и "как не нужно", а целостную историю. Поэтому вот вам статья про конкретный кейс и его историю :). Не удивляйтесь, что начнём мы с JPA, хотя казалось бы где оно и где ассемблер. По ходу дела вы всё поймёте.

Читать далее

Справочник по взлому Xbox: в память об Аароне Шварце

Время на прочтение2 мин
Охват и читатели27K
Эндрю Хуанг (Andrew Huang) выложил в свободный доступ свою книгу "Hacking the Xbox. An Introduction to Reverse Engineering". Это руководство по ремонту и модификации Xbox, 291 страница технической информации с иллюстрациями. Хотя справочник написан в 2003 году, вскоре после выхода Xbox, информация остаётся актуальной, поскольку эти игровые приставки используются до сих пор. В 2003 году оригинальная версия книги не пошла в тираж: издательство побоялось её выпускать из-за потенциальных проблем, связанных с DMCA. Автор долгое время продавал электронные копии.

Книга начинается с инструкции по разбору корпуса Xbox, с указанием моделей отвёрток, которые для этого нужны (в Xbox используются «защитные» нестандартные винты). Отдельные главы посвящены замене блока питания, сборке USB-адаптера, взлому ROM, установке бэкдора, записи лога трафика по системной шине, анализу протокола безопасности, установке на Xbox стороннего софта и разных дистрибутивов Linux, установке дополнительного объёма RAM и подключению прочих устройств к Xbox.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность