Высокоуровневое программирование на C
Мы, авторы канала, любим системное программирование, и хорошо знакомы с языком C. Этот язык — один из наших основных инструментов. А инструменты должны соответствовать задачам: мало кто забивает гвозди микроскопом или использует гвоздодер в качестве прецизионного экстрактора SMD-элементов. Тем не менее, иногда хочется использовать знакомый инструмент даже в тех областях, для которых он мало подходит.
Проект libcello добавляет в C конструкции из высокоуровневых языков программирования, автоматическое управление памятью, продвинутую объектную систему и библиотеку контейнеров. Все эти возможности привносятся в язык C только за счет библиотеки и набора макросов.
Таким образом, на C становится удобно писать небольшие «скрипты» для автоматизации повседневных задач.
Использовать ли эту необычную библиотеку в продакшне? Решать вам.
#digest
Мы, авторы канала, любим системное программирование, и хорошо знакомы с языком C. Этот язык — один из наших основных инструментов. А инструменты должны соответствовать задачам: мало кто забивает гвозди микроскопом или использует гвоздодер в качестве прецизионного экстрактора SMD-элементов. Тем не менее, иногда хочется использовать знакомый инструмент даже в тех областях, для которых он мало подходит.
Проект libcello добавляет в C конструкции из высокоуровневых языков программирования, автоматическое управление памятью, продвинутую объектную систему и библиотеку контейнеров. Все эти возможности привносятся в язык C только за счет библиотеки и набора макросов.
Таким образом, на C становится удобно писать небольшие «скрипты» для автоматизации повседневных задач.
Использовать ли эту необычную библиотеку в продакшне? Решать вам.
#digest
www.libcello.org
Cello • High Level C
libCello Official Website
👍15
Друзья! Наш маленький канал разросся почти до двух тысяч подписчиков. Спасибо вам!
Мы чувствуем большую ответственность за это, и хотим сделать контент для вас еще более персонализированным и полезным. Пожалуйста, ответьте на несколько вопросов ниже.
Мы чувствуем большую ответственность за это, и хотим сделать контент для вас еще более персонализированным и полезным. Пожалуйста, ответьте на несколько вопросов ниже.
👍9
В каком направлении вы работаете?
Anonymous Poll
78%
Разработка
2%
Тестирование
2%
Девопс
3%
Инфобез
7%
Другое техническое направление
7%
Я из нон-теха
👍2
На чем вы пишете?
Anonymous Poll
32%
С/С++
29%
С#
30%
Python
11%
Java
5%
Go
22%
JavaScript
13%
Другое
9%
Я не кодю :)
Какие материалы вы чаще всего читаете в телеграм-каналах?
Anonymous Poll
53%
Про качество кода и все, что с этим связано
50%
Про производительность и ее оптимизацию
51%
Про архитектуру и механизмы работы проектов
11%
Про менеджмент, управление и карьерный рост
30%
Про научпоп и прикладное IT
28%
Про системное программирование
25%
Про информационную безопасность
16%
Про индустриальное программирование
41%
Айтишный юмор
👍3
Баллада об неинициализированных переменных
Использование неинициализированных переменных — очевидно грустная тема. С одной стороны, это угроза безопасности (можно подстроить стек или кучу таким образом, чтобы без инициализации использовались вредоносные значения). С другой стороны, это угроза надежности/стабильности работы — в неинициализированных данных может оказаться все что угодно и это «что угодно» будет меняться от запуска к запуску, от платформы к платформе. Про запрет на использование неинициативных переменных говорят стандарты (ISO26262-6-6.1c, SEI CERT), компиляторы помогают нам найти подобные опасные места (gcc -Wuninitialized -Wgnu-empty-initializer). Статические анализаторы тоже поддерживают эстафету (раз и два).
Но почему ж такое до сих пор встречается в коде? Да потому что вопрос «а как надо?» до сих пор не решен. Ясно, что разнесение декларации от инициализации создает пространство для внесения ошибки. Можно оставить переменную в начале блока, но там не всегда известны правильные значения инициализации (а забивание переменной «мусором» скроет от компилятора потенциальное нарушение бизнес логики).
Можно объявить по месту, но тут мы встаем на скользкую тропку in-place initialisation and against holy war, а это уже война Сишников против Плюсовиков, для которых RAII является естественным. Можно дробить на микро-блоки/микро-функции, так чтобы объявление шло рука об руку с инициализацией и было осмысленным, но тут уже вкусовщина и снижение читаемости через излишне высокую гранулярность функций.
Так что же в итоге? А нет однозначного ответа! Не используйте неинициализированные переменные и пишите красивый код, как бы эта красота не была хрупка…
#digest
Использование неинициализированных переменных — очевидно грустная тема. С одной стороны, это угроза безопасности (можно подстроить стек или кучу таким образом, чтобы без инициализации использовались вредоносные значения). С другой стороны, это угроза надежности/стабильности работы — в неинициализированных данных может оказаться все что угодно и это «что угодно» будет меняться от запуска к запуску, от платформы к платформе. Про запрет на использование неинициативных переменных говорят стандарты (ISO26262-6-6.1c, SEI CERT), компиляторы помогают нам найти подобные опасные места (gcc -Wuninitialized -Wgnu-empty-initializer). Статические анализаторы тоже поддерживают эстафету (раз и два).
Но почему ж такое до сих пор встречается в коде? Да потому что вопрос «а как надо?» до сих пор не решен. Ясно, что разнесение декларации от инициализации создает пространство для внесения ошибки. Можно оставить переменную в начале блока, но там не всегда известны правильные значения инициализации (а забивание переменной «мусором» скроет от компилятора потенциальное нарушение бизнес логики).
Можно объявить по месту, но тут мы встаем на скользкую тропку in-place initialisation and against holy war, а это уже война Сишников против Плюсовиков, для которых RAII является естественным. Можно дробить на микро-блоки/микро-функции, так чтобы объявление шло рука об руку с инициализацией и было осмысленным, но тут уже вкусовщина и снижение читаемости через излишне высокую гранулярность функций.
Так что же в итоге? А нет однозначного ответа! Не используйте неинициализированные переменные и пишите красивый код, как бы эта красота не была хрупка…
#digest
PVS-Studio
V614. Use of ′Foo′ uninitialized variable.
V614. The analyzer has detected use of an uninitialized variable. Using uninitialized variables has unpredictable results. What is dangerous about such defects is that they may hide for years until chance...
👍9❤2💩1
Еще немного из нашего внутреннего чатика. В канун пятницы дошли до обсуждений об архитектуре пива в Haskell :)
#fun
#fun
👍13😁4👏2🤮2
Базовые концепции информатики
Обнаружили прелюбопытнейший сайт, охватывающий массу тем, на которые необходимо обратить внимание современному программисту.
Автор начинает с архитектуры компьютера: представления чисел, понятий процессора и инструкций, описания типичных пайплайнов, иерархии памяти, кэшей и шин, а затем на примере Unix объясняет такие понятия, как многозадачность, системные вызовы, привилегированный режим ядра, процессы, динамическая компоновка, виртуальная память…
Прочитав эти материалы, вы не сможете автоматически именоваться системным программистом, однако получите более полное представление о том, как работает современное железо и системное ПО.
Кстати, вот здесь выложена офлайн-версия в формате PDF.
#literature
Обнаружили прелюбопытнейший сайт, охватывающий массу тем, на которые необходимо обратить внимание современному программисту.
Автор начинает с архитектуры компьютера: представления чисел, понятий процессора и инструкций, описания типичных пайплайнов, иерархии памяти, кэшей и шин, а затем на примере Unix объясняет такие понятия, как многозадачность, системные вызовы, привилегированный режим ядра, процессы, динамическая компоновка, виртуальная память…
Прочитав эти материалы, вы не сможете автоматически именоваться системным программистом, однако получите более полное представление о том, как работает современное железо и системное ПО.
Кстати, вот здесь выложена офлайн-версия в формате PDF.
#literature
👍23
Обучение детей программированию
Обучать ли детей программированию, и если да, то когда начинать? А главное как это делать?
Многие наши коллеги задавались этим вопросом. Мало кто остановился на классическом LOGO — каждый выбрал что-то свое. Давайте посмотрим, с чем сталкиваются юные разработчики.
Совсем необязательно сажать чадо за компьютер — возможно начать обучение вообще без контакта с машиной. Например, существуют карточные настольные игры, способные познакомить ребенка с работой Unix-шелла, или с низкоуровневым программированием. Существуют выдуманные процессорные архитектуры, специально спроектированные для изучения системного программирования на бумаге, например WDR Paper Computer. Любители низкого уровня наверняка оценят детские раскраски, позволяющие моделировать логику на основе NOR вентилей, а приверженцы функционального стиля обрадуются, что смогут обучить чадо основам лямбда-исчисления на основе «Alligator Eggs Puzzle Game».
Есть и куда более продвинутые выдуманные архитектуры, например LC-3. Этот компьютер уже не подойдет для симуляции на бумаге, зато его удобно программировать в шестнадцатеричных кодах, даже без ассемблера.
Есть специальные среды для детского программирования. Наиболее популярная такая среда — Scratch. Здесь можно создавать игры и симуляции на императивном языке программирования.
Много хороших сред с низким порогом входа существует для Lua: одна из наиболее популярных — среда для iPad под названием Codea. Она позволит начинающим программистам достаточно быстро начать создавать простые игры и симуляции. Вдохновившись Codea, автор Redis Сальватор Санфилиппо разработал простую открытую среду load81 именно с целью обучения детей программированию.
Кстати, благодаря простоте освоения Lua появилось множество фентезийных консолей — симуляторов игровых платформ, которых никогда не существовало. Для этих игровых платформ можно разрабатывать игры в довольно простых и понятных для юных разработчиков средах. Самая популярная фэнтези-консоль — PICO-8. Для нее уже создано множество игр, но каждый пользователь может создать что-то свое благодаря встроенным средствам разработки. PICO-8 стоит денег, но есть множество открытых аналогов, например суперпопулярная TIC-80. В качестве более серьезной платформы для программирования на Lua можно рассмотреть LÖVE 2D и ZeroBrane Studio.
Ну и всегда в топе остаются реализации нестареющей классики, языка LOGO.
Мы уверены, что в этом обзоре перечислены далеко не все способы, что могут заинтересовать чадо программированием :)
Пишите ваши варианты/лайфхаки в комментариях.
#digest
Обучать ли детей программированию, и если да, то когда начинать? А главное как это делать?
Многие наши коллеги задавались этим вопросом. Мало кто остановился на классическом LOGO — каждый выбрал что-то свое. Давайте посмотрим, с чем сталкиваются юные разработчики.
Совсем необязательно сажать чадо за компьютер — возможно начать обучение вообще без контакта с машиной. Например, существуют карточные настольные игры, способные познакомить ребенка с работой Unix-шелла, или с низкоуровневым программированием. Существуют выдуманные процессорные архитектуры, специально спроектированные для изучения системного программирования на бумаге, например WDR Paper Computer. Любители низкого уровня наверняка оценят детские раскраски, позволяющие моделировать логику на основе NOR вентилей, а приверженцы функционального стиля обрадуются, что смогут обучить чадо основам лямбда-исчисления на основе «Alligator Eggs Puzzle Game».
Есть и куда более продвинутые выдуманные архитектуры, например LC-3. Этот компьютер уже не подойдет для симуляции на бумаге, зато его удобно программировать в шестнадцатеричных кодах, даже без ассемблера.
Есть специальные среды для детского программирования. Наиболее популярная такая среда — Scratch. Здесь можно создавать игры и симуляции на императивном языке программирования.
Много хороших сред с низким порогом входа существует для Lua: одна из наиболее популярных — среда для iPad под названием Codea. Она позволит начинающим программистам достаточно быстро начать создавать простые игры и симуляции. Вдохновившись Codea, автор Redis Сальватор Санфилиппо разработал простую открытую среду load81 именно с целью обучения детей программированию.
Кстати, благодаря простоте освоения Lua появилось множество фентезийных консолей — симуляторов игровых платформ, которых никогда не существовало. Для этих игровых платформ можно разрабатывать игры в довольно простых и понятных для юных разработчиков средах. Самая популярная фэнтези-консоль — PICO-8. Для нее уже создано множество игр, но каждый пользователь может создать что-то свое благодаря встроенным средствам разработки. PICO-8 стоит денег, но есть множество открытых аналогов, например суперпопулярная TIC-80. В качестве более серьезной платформы для программирования на Lua можно рассмотреть LÖVE 2D и ZeroBrane Studio.
Ну и всегда в топе остаются реализации нестареющей классики, языка LOGO.
Мы уверены, что в этом обзоре перечислены далеко не все способы, что могут заинтересовать чадо программированием :)
Пишите ваши варианты/лайфхаки в комментариях.
#digest
punkx
4917 - Machine Code for Kids
This is a card game for teaching kids how to read and write machine code, using a simple 4 bit computer with very simple instruction set, 2 general purpose registers and only 16 cells of addressable memory. Just to manage your expectations, those are basically…
👍15🥰2
Логические схемы на… пайпах
Наверняка многие из читателей используют какой-либо вариант Unix: MacOS, GNU/Linux или, например, OpenBSD. Даже MS Windows предоставляет возможность пользоваться благами Unix-мира через WSL.
Уверены, многие из вас ценят возможность комбинировать в шелле небольшие программы в конвейеры, что позволяет нетривиально обрабатывать данные, используя достаточно простые инструменты.
Сама идея пайпов и комбинирования небольших программ принадлежит Дугласу Макилрою (Douglas McIlroy) — одному из авторов Unix.
Все мы используем этот простой механизм, но осознаем ли до конца его возможности? Лайнус Акессон (Linus Åkesson) нашел пайпам очень необычное применение.
Лайнус использовал пайпы для представления типовых логических вентилей и научился создавать из таких вентилей цифровые схемы. Получается, сам механизм пайпов может быть использован для построения простых вычислителей!
Конечно, ни о каком практическом применении этой находки не может быть и речи. Но этот пример в очередной раз демонстрирует, насколько простые примитивы могут лежать в основе цифровой вычислительной машины.
#digest
Наверняка многие из читателей используют какой-либо вариант Unix: MacOS, GNU/Linux или, например, OpenBSD. Даже MS Windows предоставляет возможность пользоваться благами Unix-мира через WSL.
Уверены, многие из вас ценят возможность комбинировать в шелле небольшие программы в конвейеры, что позволяет нетривиально обрабатывать данные, используя достаточно простые инструменты.
Сама идея пайпов и комбинирования небольших программ принадлежит Дугласу Макилрою (Douglas McIlroy) — одному из авторов Unix.
Все мы используем этот простой механизм, но осознаем ли до конца его возможности? Лайнус Акессон (Linus Åkesson) нашел пайпам очень необычное применение.
Лайнус использовал пайпы для представления типовых логических вентилей и научился создавать из таких вентилей цифровые схемы. Получается, сам механизм пайпов может быть использован для построения простых вычислителей!
Конечно, ни о каком практическом применении этой находки не может быть и речи. Но этот пример в очередной раз демонстрирует, насколько простые примитивы могут лежать в основе цифровой вычислительной машины.
#digest
👍6🤯6
Как компьютерная графика подняла сетевой протокол
Один из наших авторов однажды участвовал в проекте, в котором надо было передавать по Wi-Fi видеопоток в DVD-качестве (5-7 мегабит) с устройства, которое не являлось точкой доступа, сразу на несколько принимающих PC.
А надо сказать, в стандартном Wi-Fi все ходит через точку доступа. То есть любой пакет от станции к станции занимает эфир два раза. Вдобавок Wi-Fi был старомодный, 54 мегабита, что с учетом всех зазоров между пакетами давало где-то 22 реальных мегабита по TCP между станцией и точкой доступа, или половину этого между двумя станциями (автор, конечно, использовал UDP, но цифры по TCP уместны для оценки).
В общем, пришлось изобретать метод, как передавать данные между станциями напрямую, минуя точку доступа ни ничего при этом не ломая. Как следствие, пришлось изобретать механизм подбора оптимальной скорости модуляции.
Допустим, можно среди пакетов, которые передаются на выбранной скорости, подмешать некоторое количество пробных пакетов на других скоростях, посчитать по ним статистику и выбрать скорость, которая кажется наиболее многообещающей, с учетом теоретической скорости доставки и статистики потерь.
Но как среди N пакетов послать M пробных, более-менее равномерно размазав их среди общего потока?
Для этой цели автор применил графический алгоритм Брезенхема, рисующий линии на дискретном экране: мысленно рисуем диагональ прямоугольничка NxM и там, где линия меняет высоту, вставляем пробный пакет.
Так, графический алгоритм, придуманный для рисования на экране прямых, нашел свое применение в сетевом протоколе :)
#digest
Один из наших авторов однажды участвовал в проекте, в котором надо было передавать по Wi-Fi видеопоток в DVD-качестве (5-7 мегабит) с устройства, которое не являлось точкой доступа, сразу на несколько принимающих PC.
А надо сказать, в стандартном Wi-Fi все ходит через точку доступа. То есть любой пакет от станции к станции занимает эфир два раза. Вдобавок Wi-Fi был старомодный, 54 мегабита, что с учетом всех зазоров между пакетами давало где-то 22 реальных мегабита по TCP между станцией и точкой доступа, или половину этого между двумя станциями (автор, конечно, использовал UDP, но цифры по TCP уместны для оценки).
В общем, пришлось изобретать метод, как передавать данные между станциями напрямую, минуя точку доступа ни ничего при этом не ломая. Как следствие, пришлось изобретать механизм подбора оптимальной скорости модуляции.
Допустим, можно среди пакетов, которые передаются на выбранной скорости, подмешать некоторое количество пробных пакетов на других скоростях, посчитать по ним статистику и выбрать скорость, которая кажется наиболее многообещающей, с учетом теоретической скорости доставки и статистики потерь.
Но как среди N пакетов послать M пробных, более-менее равномерно размазав их среди общего потока?
Для этой цели автор применил графический алгоритм Брезенхема, рисующий линии на дискретном экране: мысленно рисуем диагональ прямоугольничка NxM и там, где линия меняет высоту, вставляем пробный пакет.
Так, графический алгоритм, придуманный для рисования на экране прямых, нашел свое применение в сетевом протоколе :)
#digest
👏7🤩2🤔1
Защищенный режим для Zilog Z80
Знаете ли вы, что такое защищенный режим?
Современные процессоры предоставляют системному программисту средства защиты. Эти средства позволяют защитить область ядра ОС от чтения и записи со стороны пользовательских процессов, а также защитить память процессов друг от друга.
Разные процессоры предоставляют разные механизмы, позволяющие организовать такую защиту.
x86 — наиболее популярная архитектура, применяемая в персональных компьютерах, вводит понятия колец защиты. В этой терминологии ядро ОС исполняется на нулевом кольце, а программы пользователя – на третьем. И третье кольцо сильно ограничивает набор инструкций, доступный программам. Также процессор предоставляет механизмы сегментации и страничной адресации. Они позволяют создавать независимые друг от друга адресные пространства.
Процессоры производителя ARM предоставляют несколько уровней исключений (exception levels), каждый со своим банком системных регистров, а также механизм страничной адресации.
В общем, большинство современных процессоров имеют тот или иной механизм защиты кода ядра и памяти процессов друг от друга.
А что же z80? Это процессорная архитектура из прошлого. Если вы слышали про домашний компьютер ZX Spectrum, то это как раз машина на основе z80. Этот архаичный, хотя и многими любимый процессор, никогда не задумывался для использования в многозадачной среде. Лучший сценарий использования для него — одна программа, занимающая большую часть ОЗУ. Нужно загрузить другую программу? Что же — перезагружаем машину!
Автор видео по ссылке, Энди Ху, не стал мириться с такими ограничениями и попытался придумать нехитрую модификацию для обвязки процессора z80, чтобы он начал поддерживать что-то похожее на защищенный режим. Благодаря его доработкам, z80 приблизился к современным процессорам по возможностям разграничивать доступ к разным участкам памяти, что позволяет создавать для z80 продвинутые многозадачные операционные системы. Конечно же с разумными для восьмибитного процессора ограничениями.
А был ли у вас какой-либо восьмибитный компьютер? ZX Spectrum, Commodore 64? Напишите в комментариях.
#digest
Знаете ли вы, что такое защищенный режим?
Современные процессоры предоставляют системному программисту средства защиты. Эти средства позволяют защитить область ядра ОС от чтения и записи со стороны пользовательских процессов, а также защитить память процессов друг от друга.
Разные процессоры предоставляют разные механизмы, позволяющие организовать такую защиту.
x86 — наиболее популярная архитектура, применяемая в персональных компьютерах, вводит понятия колец защиты. В этой терминологии ядро ОС исполняется на нулевом кольце, а программы пользователя – на третьем. И третье кольцо сильно ограничивает набор инструкций, доступный программам. Также процессор предоставляет механизмы сегментации и страничной адресации. Они позволяют создавать независимые друг от друга адресные пространства.
Процессоры производителя ARM предоставляют несколько уровней исключений (exception levels), каждый со своим банком системных регистров, а также механизм страничной адресации.
В общем, большинство современных процессоров имеют тот или иной механизм защиты кода ядра и памяти процессов друг от друга.
А что же z80? Это процессорная архитектура из прошлого. Если вы слышали про домашний компьютер ZX Spectrum, то это как раз машина на основе z80. Этот архаичный, хотя и многими любимый процессор, никогда не задумывался для использования в многозадачной среде. Лучший сценарий использования для него — одна программа, занимающая большую часть ОЗУ. Нужно загрузить другую программу? Что же — перезагружаем машину!
Автор видео по ссылке, Энди Ху, не стал мириться с такими ограничениями и попытался придумать нехитрую модификацию для обвязки процессора z80, чтобы он начал поддерживать что-то похожее на защищенный режим. Благодаря его доработкам, z80 приблизился к современным процессорам по возможностям разграничивать доступ к разным участкам памяти, что позволяет создавать для z80 продвинутые многозадачные операционные системы. Конечно же с разумными для восьмибитного процессора ограничениями.
А был ли у вас какой-либо восьмибитный компьютер? ZX Spectrum, Commodore 64? Напишите в комментариях.
#digest
🔥6⚡3👍2
Что такое код?
Друзья и родственники спрашивают, чем вы занимаетесь на работе? Как объяснить человеку, незнакомому с программированием, что же это такое? Насколько это непросто, и почему не нужно отвлекать вас, когда вы сидите в отладчике? 🤬
Пол Форд (Paul Ford) постарался рассказать читателям, что такое код и чем занимаются программисты. Статья Пола выполнена в виде интерактивного документа, где читатель может попробовать себя в роли программиста, инженера цифровой электроники или даже проектного менеджера.
P.S. Не пугайтесь, когда столь активная страница запросит у вас разрешение на доступ к камере!
#literature
Друзья и родственники спрашивают, чем вы занимаетесь на работе? Как объяснить человеку, незнакомому с программированием, что же это такое? Насколько это непросто, и почему не нужно отвлекать вас, когда вы сидите в отладчике? 🤬
Пол Форд (Paul Ford) постарался рассказать читателям, что такое код и чем занимаются программисты. Статья Пола выполнена в виде интерактивного документа, где читатель может попробовать себя в роли программиста, инженера цифровой электроники или даже проектного менеджера.
P.S. Не пугайтесь, когда столь активная страница запросит у вас разрешение на доступ к камере!
#literature
Bloomberg.com
What Is Code? If You Don't Know, You Need to Read This
The world belongs to people who code. Those who don’t understand will be left behind.
🤔3😁1🙏1
Мы любим не только писать, но и читать, и слушать. Поэтому ходим на конференции и митапы. И хотя все крупные события в этом сезоне уже отгремели, до конца года осталась парочка ивентов, которые точно заслуживают внимания. Тем более они бесплатные. И регистрация еще открыта.
YaTalks. 3-4 декабря, Онлайн и офлайн (Москва, Белград)
Жизнь и работа в текущей реальности: как развиваться в профессии, строить команды и бороться с кризисами
https://yatalks.yandex.ru/ru
KasperskyOS Night. 7-8 декабря, Онлайн
Как создавать продукты, защищенные от подавляющего большинства типов киберугроз на уровне архитектуры
https://os.kaspersky.ru/night_2022/
Елка для ИТ-директоров. 8 декабря, Офлайн (Сколково)
Неформальная бизнес-встреча с CTO, CXO и CDTO: результаты и достижения, обмен опытом, обсуждение планов
https://vk.company/ru/press/events/952/
#digest
YaTalks. 3-4 декабря, Онлайн и офлайн (Москва, Белград)
Жизнь и работа в текущей реальности: как развиваться в профессии, строить команды и бороться с кризисами
https://yatalks.yandex.ru/ru
KasperskyOS Night. 7-8 декабря, Онлайн
Как создавать продукты, защищенные от подавляющего большинства типов киберугроз на уровне архитектуры
https://os.kaspersky.ru/night_2022/
Елка для ИТ-директоров. 8 декабря, Офлайн (Сколково)
Неформальная бизнес-встреча с CTO, CXO и CDTO: результаты и достижения, обмен опытом, обсуждение планов
https://vk.company/ru/press/events/952/
#digest
yatalks.yandex.ru
Главная конференция Яндекса для IT-сообщества — YaTalks 2023
5 и 6 декабря более 100 экспертов IT-индустрии и учёных выступят в Москве и Белграде с техническими докладами о разработке и ML и с научно-популярными лекциями.
👍4🔥3
Наши коллеги во внутреннем чате настолько мощно шарят в безопасности, что даже придумали свою итерацию для мемчика. А как вы стираете память воды? :)
#fun
#fun
😁7❤2👍2
Наверняка вы знаете о SELinux, подсистеме ядра, привносящей в систему механизмы мандатного контроля доступа. SELinux имеет славу сложного ПО, а наиболее популярный вопрос от пользователей — о том как его отключить :)
Разобраться в том, что же это такое, а также как работают Type Enforcement, Multi Category и Multi Level Security в SELinux, поможет эта иллюстрированная статья.
#literature
Разобраться в том, что же это такое, а также как работают Type Enforcement, Multi Category и Multi Level Security в SELinux, поможет эта иллюстрированная статья.
#literature
Opensource.com
Your visual how-to guide for SELinux policy enforcement
We are celebrating the SELinux 10th year anversary this year. Hard to believe it. SELinux was first introduced in Fedora Core 3 and later in Red Hat Enterprise Linux 4. For those who have never used SELinux, or would like an explanation...
👍5
Не искушайтесь аудит-логами
На многих системах во имя безопасности появляется сущность аудит-лога. Аудит-лог предназначен для хранения информации о событиях безопасности (например: «пользователь залогинился», «пользователь 3 раза подряд не смог залогиниться», «пользователь удалил бэкап» и так далее).
Аудит-лог, как правило, сделан добротно и аттестован всеми аттестатами. И тут возникает искушение писать в него не только события безопасности, но и общесистемные события, которые кажутся важными (к примеру, когда пофейлилась аллокация в ядре). Оставим за скобками что важных-как-кажется-событий будет становится больше и решительно осудим такой подход с самого начала.
1. Как правило, у аудит-лога и обычного лога разные настройки конфиденциальности. Обычные логи может читать администратор системы или даже простой пользователь во имя debug-ability и возможности самостоятельно решать часть проблем. Аудит-лог читает только аудитор, так как он содержит сенситивную информацию.
2. Аудит-лог и обычный лог чаще всего имеют разные политики целостности. В обычный лог пишут и обычные приложения, и самые разные части системы. А произвольная запись в аудит-лог должна быть ограничена — только TCB-of-TCB может перезаписать данные. Если вообще может.
3. Аудит-лог и обычный лог имеют разные retention policies. Обычные логи ротируются и обрезаются. Аудит-лог хранится долго, и его ротация – это важное событие, которое благословляется высокими кредами, а иногда сопровождается записью на другой носитель.
Вывод: используйте концепты по прямому назначению и не используйте их всуе. А если хотите переиспользовать концепт вне домена, четко представляйте ограничения в моменте и их будущее развитие.
#digest
На многих системах во имя безопасности появляется сущность аудит-лога. Аудит-лог предназначен для хранения информации о событиях безопасности (например: «пользователь залогинился», «пользователь 3 раза подряд не смог залогиниться», «пользователь удалил бэкап» и так далее).
Аудит-лог, как правило, сделан добротно и аттестован всеми аттестатами. И тут возникает искушение писать в него не только события безопасности, но и общесистемные события, которые кажутся важными (к примеру, когда пофейлилась аллокация в ядре). Оставим за скобками что важных-как-кажется-событий будет становится больше и решительно осудим такой подход с самого начала.
1. Как правило, у аудит-лога и обычного лога разные настройки конфиденциальности. Обычные логи может читать администратор системы или даже простой пользователь во имя debug-ability и возможности самостоятельно решать часть проблем. Аудит-лог читает только аудитор, так как он содержит сенситивную информацию.
2. Аудит-лог и обычный лог чаще всего имеют разные политики целостности. В обычный лог пишут и обычные приложения, и самые разные части системы. А произвольная запись в аудит-лог должна быть ограничена — только TCB-of-TCB может перезаписать данные. Если вообще может.
3. Аудит-лог и обычный лог имеют разные retention policies. Обычные логи ротируются и обрезаются. Аудит-лог хранится долго, и его ротация – это важное событие, которое благословляется высокими кредами, а иногда сопровождается записью на другой носитель.
Вывод: используйте концепты по прямому назначению и не используйте их всуе. А если хотите переиспользовать концепт вне домена, четко представляйте ограничения в моменте и их будущее развитие.
#digest
🔥6❤2