Just code IT
1.42K subscribers
49 photos
134 links
Верим в everything-as-code. Обсуждаем, как писать чище, ревьюить объективнее, деплоить быстрее.
Download Telegram
Channel created
Нужна ли математика программистам? Этот вопрос любят жарко обсуждать на Reddit, Хабре и других площадках.

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

Лучшая, на наш взгляд, книга для ликбеза — совместное творение Эрика Лемана, Фрэнка Томсона Лейтона и Альберта Мейера (Eric Lehman, F. Thomson Leighton, Albert M. Meyer) под названием «Mathematics for Computer Science».

Не читали? Качайте по этой или альтернативной ссылкам.

Читали? И как вам?

Знаете что-то лучше? Напишите в комментариях.

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

#digest
👍2
Essense OS

Образ этой ОС занимает всего 30 мегабайт, а запуск системы до появления рабочего стола происходит практически мгновенно.

Графический интерфейс Essense был явно вдохновлен старым интерфейсом Google Chrome и оконным менеджером Rio из операционной системы Plan 9. Программы в этой системе не запускаются в собственных отдельных окнах, а наследуют то окно, из которого они были запущены. Для отображения интерфейса программы в окне появляется отдельная вкладка. Вкладки приложений могут перемещаться между открытыми окнами.

В Essense уже есть несколько графических приложений: файловый менеджер, текстовый редактор, клиент IRC, эмулятор терминала. Есть и портированные компоненты, например GCC, позволяющий собирать Essense из самой себя.

Ядро системы тоже не отстает: реализован стек TCP/IP, блочный кеш, разделяемая память, планировщик, учитывающий инверсию приоритетов, аудио-микшер и подсистема совместимости с POSIX.

#digest
👍3
ToaruOS

Этот проект широко известен среди разработчиков ОС. ToaruOS разрабатывается одним человеком и в базовой сборке не содержит никаких внешних зависимостей. Все в системе было написано автором с нуля!

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

Автор (Klange) разработал множество родных для этой ОС приложений. Есть и менеджер пакетов, позволяющий доустанавливать портированные из Unix приложения по сети.

На базе ToaruOS первого апреля каждого года выпускается юмористическая сборка — PonyOS. Случайные посетители этого сайта оказываются ошарашенными: они не могут поверить, что кто-то потратил столько сил и времени, чтобы создать продвинутую ОС, построенную вокруг вселенной My Little Pony.

#digest
👍4
SerenityOS

Этот проект также хорошо известен сообществу.

Задумывая SerenityOS, Андреас Клинг вдохновлялся Unix системами и графическими интерфейсами начала 2000-х.

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

Кроме довольно функционального ядра и оконного менеджера, автор вместе с сообществом разработал множество приложений с нуля, включая движок JavaScript, браузер, средства разработки, отладки и профилирования приложений!

Андреас ведет канал на YouTube, где периодически выкладывает отчеты о разработке системы или программирует в прямом эфире.

#digest
👍3
Visopsys

Достаточно старый проект, стартовавший в далеком 97 году.

Visopsys поддерживает графическое окружение благодаря графическому серверу, похожему на XOrg, интегрированному непосредственно в ядро. Ядро поддерживает 32-битные x86 системы, многозадачность, предоставляет средства работы с сетью и накопителями.

Автор Visopsys (Энди Маклаглин) реализовал множество приложений для своей системы: менеджер архивов, файловый менеджер, редактор шрифтов и изображений, сниффер сетевых пакетов, telnet-клиент, текстовый редактор, калькулятор и даже пакетный менеджер.

#digest
👍2
BrutalOS

Микроядерная ОС, созданная sleepy-monax, автором другого проекта, операционной системы SkiftOS.

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

Авторы разработали свой язык описания интерфейсов между программами и компилятор для него. Они также создают свой компилятор языка C и планируют использовать его для разработки системы.

Ядро этой ОС вобрало в себя идеи современных микроядер: например, оно реализует менеджер объектов и механизм, близкий по смыслу к OCAP (Object Capabilities).

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

Есть для системы и переносимая GUI-библиотека, разработанная на чистом C, которую можно использовать за пределами BrutalOS, например в Linux.

#digest
👍6
Особенности архитектуры процессоров ARM

Процессоры ARM работают с двумя типами памяти: normal memory и device memory. Задать тип памяти можно при помощи регистра MAIR (Memory Attribute Indirection Register) и группы из трех бит в записи таблицы страниц.

Тип памяти device memory обычно применяют для тех регионов, доступ к которым может породить какой-либо сайд-эффект. Обычно это память регистров устройств.

Во всем этом нет ничего удивительного, пока мы не сталкиваемся с конвейером процессора и спекулятивным исполнением. Процессор может пытаться спекулятивно исполнять код, выбирая его из памяти, любой памяти, которая не маркирована атрибутом XN (Execute Never). В том числе из device memory!

В документации ARM утверждают, что выборка инструкций из device memory приводит к непредсказуемому результату.

Описанное выше — не просто теория, приходилось сталкиваться с подобным поведением на практике: из-за забытого XN-бита в записях таблиц страниц контроллер прерываний иногда работал некорректно, переходя в непредсказуемые состояния. Виновником оказалась спекулятивная выборка из device memory.
👍2
При портировании достаточно старой версии библиотеки glib коллеги обнаружили, что autoconf генерирует невалидный код, который отвергается современным gcc.

Это ошибка компилятора или скрипта, генерирующего программу? Обратимся к стандарту👇
👍1