Нужна ли математика программистам? Этот вопрос любят жарко обсуждать на Reddit, Хабре и других площадках.
Мы считаем, что нужна. Но далеко не вся. Математическая логика, искусство доказательства, множества, основы теории вероятности, комбинаторика, модульная арифметика, графы, случайные числа — определенный минимум, который точно был бы полезен. Его знание пригодится при решении повседневных рабочих задач, а также даст вам конкурентное преимущество перед теми, кто этими дисциплинами не владеет.
Лучшая, на наш взгляд, книга для ликбеза — совместное творение Эрика Лемана, Фрэнка Томсона Лейтона и Альберта Мейера (Eric Lehman, F. Thomson Leighton, Albert M. Meyer) под названием «Mathematics for Computer Science».
Не читали? Качайте по этой или альтернативной ссылкам.
Читали? И как вам?
Знаете что-то лучше? Напишите в комментариях.
#literature
Мы считаем, что нужна. Но далеко не вся. Математическая логика, искусство доказательства, множества, основы теории вероятности, комбинаторика, модульная арифметика, графы, случайные числа — определенный минимум, который точно был бы полезен. Его знание пригодится при решении повседневных рабочих задач, а также даст вам конкурентное преимущество перед теми, кто этими дисциплинами не владеет.
Лучшая, на наш взгляд, книга для ликбеза — совместное творение Эрика Лемана, Фрэнка Томсона Лейтона и Альберта Мейера (Eric Lehman, F. Thomson Leighton, Albert M. Meyer) под названием «Mathematics for Computer Science».
Не читали? Качайте по этой или альтернативной ссылкам.
Читали? И как вам?
Знаете что-то лучше? Напишите в комментариях.
#literature
👍8
Прошли времена, когда операционные системы, разработанные как хобби-проекты, могли впечатлить только хакеров. Все больше новых проектов ставят себе цель серьезнее, чем просто разобраться в тонкостях работы железа и низкоуровневом программировании. Появилось несколько популярных проектов, предоставляющих графический интерфейс, сопоставимый с коммерчески успешными, серьезными операционными системами.
#digest
#digest
👍2
Essense OS
Образ этой ОС занимает всего 30 мегабайт, а запуск системы до появления рабочего стола происходит практически мгновенно.
Графический интерфейс Essense был явно вдохновлен старым интерфейсом Google Chrome и оконным менеджером Rio из операционной системы Plan 9. Программы в этой системе не запускаются в собственных отдельных окнах, а наследуют то окно, из которого они были запущены. Для отображения интерфейса программы в окне появляется отдельная вкладка. Вкладки приложений могут перемещаться между открытыми окнами.
В Essense уже есть несколько графических приложений: файловый менеджер, текстовый редактор, клиент IRC, эмулятор терминала. Есть и портированные компоненты, например GCC, позволяющий собирать Essense из самой себя.
Ядро системы тоже не отстает: реализован стек TCP/IP, блочный кеш, разделяемая память, планировщик, учитывающий инверсию приоритетов, аудио-микшер и подсистема совместимости с POSIX.
#digest
Образ этой ОС занимает всего 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
Этот проект широко известен среди разработчиков ОС. ToaruOS разрабатывается одним человеком и в базовой сборке не содержит никаких внешних зависимостей. Все в системе было написано автором с нуля!
В ToaruOS есть графический композитный менеджер окон, позволяющий даже вращение окон. Все это без использования графического ускорителя.
Автор (Klange) разработал множество родных для этой ОС приложений. Есть и менеджер пакетов, позволяющий доустанавливать портированные из Unix приложения по сети.
На базе ToaruOS первого апреля каждого года выпускается юмористическая сборка — PonyOS. Случайные посетители этого сайта оказываются ошарашенными: они не могут поверить, что кто-то потратил столько сил и времени, чтобы создать продвинутую ОС, построенную вокруг вселенной My Little Pony.
#digest
👍4
SerenityOS
Этот проект также хорошо известен сообществу.
Задумывая SerenityOS, Андреас Клинг вдохновлялся Unix системами и графическими интерфейсами начала 2000-х.
Некоторое время назад Андреас уволился с работы, чтобы посвятить себя разработке Serenity и система стала прогрессировать с невероятной скоростью.
Кроме довольно функционального ядра и оконного менеджера, автор вместе с сообществом разработал множество приложений с нуля, включая движок JavaScript, браузер, средства разработки, отладки и профилирования приложений!
Андреас ведет канал на YouTube, где периодически выкладывает отчеты о разработке системы или программирует в прямом эфире.
#digest
Этот проект также хорошо известен сообществу.
Задумывая SerenityOS, Андреас Клинг вдохновлялся Unix системами и графическими интерфейсами начала 2000-х.
Некоторое время назад Андреас уволился с работы, чтобы посвятить себя разработке Serenity и система стала прогрессировать с невероятной скоростью.
Кроме довольно функционального ядра и оконного менеджера, автор вместе с сообществом разработал множество приложений с нуля, включая движок JavaScript, браузер, средства разработки, отладки и профилирования приложений!
Андреас ведет канал на YouTube, где периодически выкладывает отчеты о разработке системы или программирует в прямом эфире.
#digest
👍3
Visopsys
Достаточно старый проект, стартовавший в далеком 97 году.
Visopsys поддерживает графическое окружение благодаря графическому серверу, похожему на XOrg, интегрированному непосредственно в ядро. Ядро поддерживает 32-битные x86 системы, многозадачность, предоставляет средства работы с сетью и накопителями.
Автор Visopsys (Энди Маклаглин) реализовал множество приложений для своей системы: менеджер архивов, файловый менеджер, редактор шрифтов и изображений, сниффер сетевых пакетов, telnet-клиент, текстовый редактор, калькулятор и даже пакетный менеджер.
#digest
Достаточно старый проект, стартовавший в далеком 97 году.
Visopsys поддерживает графическое окружение благодаря графическому серверу, похожему на XOrg, интегрированному непосредственно в ядро. Ядро поддерживает 32-битные x86 системы, многозадачность, предоставляет средства работы с сетью и накопителями.
Автор Visopsys (Энди Маклаглин) реализовал множество приложений для своей системы: менеджер архивов, файловый менеджер, редактор шрифтов и изображений, сниффер сетевых пакетов, telnet-клиент, текстовый редактор, калькулятор и даже пакетный менеджер.
#digest
👍2
BrutalOS
Микроядерная ОС, созданная sleepy-monax, автором другого проекта, операционной системы SkiftOS.
Этот проект появился сравнительно недавно, и у него многое впереди, но уже сейчас видно, как силами нескольких авторов система стремительно развивается.
Авторы разработали свой язык описания интерфейсов между программами и компилятор для него. Они также создают свой компилятор языка C и планируют использовать его для разработки системы.
Ядро этой ОС вобрало в себя идеи современных микроядер: например, оно реализует менеджер объектов и механизм, близкий по смыслу к OCAP (Object Capabilities).
Стандартная библиотека Brutal предоставляет множество удобных механизмов, например легковесные кооперативные нити, позволящие асинхронно обрабатывать сообщения от других процессов.
Есть для системы и переносимая GUI-библиотека, разработанная на чистом C, которую можно использовать за пределами BrutalOS, например в Linux.
#digest
Микроядерная ОС, созданная sleepy-monax, автором другого проекта, операционной системы SkiftOS.
Этот проект появился сравнительно недавно, и у него многое впереди, но уже сейчас видно, как силами нескольких авторов система стремительно развивается.
Авторы разработали свой язык описания интерфейсов между программами и компилятор для него. Они также создают свой компилятор языка C и планируют использовать его для разработки системы.
Ядро этой ОС вобрало в себя идеи современных микроядер: например, оно реализует менеджер объектов и механизм, близкий по смыслу к OCAP (Object Capabilities).
Стандартная библиотека Brutal предоставляет множество удобных механизмов, например легковесные кооперативные нити, позволящие асинхронно обрабатывать сообщения от других процессов.
Есть для системы и переносимая GUI-библиотека, разработанная на чистом C, которую можно использовать за пределами BrutalOS, например в Linux.
#digest
👍6
Особенности архитектуры процессоров ARM
Процессоры ARM работают с двумя типами памяти:
Тип памяти
Во всем этом нет ничего удивительного, пока мы не сталкиваемся с конвейером процессора и спекулятивным исполнением. Процессор может пытаться спекулятивно исполнять код, выбирая его из памяти, любой памяти, которая не маркирована атрибутом XN (Execute Never). В том числе из
В документации ARM утверждают, что выборка инструкций из
Описанное выше — не просто теория, приходилось сталкиваться с подобным поведением на практике: из-за забытого XN-бита в записях таблиц страниц контроллер прерываний иногда работал некорректно, переходя в непредсказуемые состояния. Виновником оказалась спекулятивная выборка из
Процессоры ARM работают с двумя типами памяти:
normal memory и device memory. Задать тип памяти можно при помощи регистра MAIR (Memory Attribute Indirection Register) и группы из трех бит в записи таблицы страниц.Тип памяти
device memory обычно применяют для тех регионов, доступ к которым может породить какой-либо сайд-эффект. Обычно это память регистров устройств.Во всем этом нет ничего удивительного, пока мы не сталкиваемся с конвейером процессора и спекулятивным исполнением. Процессор может пытаться спекулятивно исполнять код, выбирая его из памяти, любой памяти, которая не маркирована атрибутом XN (Execute Never). В том числе из
device memory!В документации ARM утверждают, что выборка инструкций из
device memory приводит к непредсказуемому результату.Описанное выше — не просто теория, приходилось сталкиваться с подобным поведением на практике: из-за забытого XN-бита в записях таблиц страниц контроллер прерываний иногда работал некорректно, переходя в непредсказуемые состояния. Виновником оказалась спекулятивная выборка из
device memory.👍2
✔An integer constant expression96) shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof operator.
✔An integer constant expression is used to specify the size of a bit-field member of a structure, the value of an enumeration constant, the size of an array, or the value of a case constant. Further constraints that apply to the integer constant expressions used in conditional-inclusion preprocessing directives are discussed in 6.10.1.
✔If the size is not present, the array type is an incomplete type. If the size is * instead of being an expression, the array type is a variable length array type of unspecified size, which can only be used in declarations with function prototype scope;122) such arrays are nonetheless complete types. If the size is an integer constant expression and the element type has a known constant size, the array type is not a variable length array type; otherwise, the array type is a variable length array type.
Из перечисленных выдержек можно заключить: проблема в сгенерированном коде. Поищем, есть ли баги в glib, связанные с этой проблемой.
А вот и баг-репорт.
Компилятор был прав!😈
✔An integer constant expression is used to specify the size of a bit-field member of a structure, the value of an enumeration constant, the size of an array, or the value of a case constant. Further constraints that apply to the integer constant expressions used in conditional-inclusion preprocessing directives are discussed in 6.10.1.
✔If the size is not present, the array type is an incomplete type. If the size is * instead of being an expression, the array type is a variable length array type of unspecified size, which can only be used in declarations with function prototype scope;122) such arrays are nonetheless complete types. If the size is an integer constant expression and the element type has a known constant size, the array type is not a variable length array type; otherwise, the array type is a variable length array type.
Из перечисленных выдержек можно заключить: проблема в сгенерированном коде. Поищем, есть ли баги в glib, связанные с этой проблемой.
А вот и баг-репорт.
Компилятор был прав!😈