Как стать автором
Обновить
1
0

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

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

Организация распределённого хранения файлов с помощью git-annex

Время на прочтение 14 мин
Количество просмотров 9K

Разберем способ удобного хранения 35 000 файлов домашней коллекции, которая используется на 3 ПК и 2 телефонах с использованием git-annex.

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

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 11

Пошаговый запуск программы в Linux x86, или как добраться до main()?

Время на прочтение 18 мин
Количество просмотров 23K


Статья предназначена для тех, кто хочет понять процесс загрузки программ в Linux. В частности, здесь пойдет речь о динамической загрузке файлов ELF x86. На основе изложенной информации вы сможете лучше понять, как устранять проблемы, возникающие в программе еще до запуска main.
Читать дальше →
Всего голосов 60: ↑59 и ↓1 +58
Комментарии 10

Использование быстрых клавиш в командной строке Linux (BASH)

Время на прочтение 14 мин
Количество просмотров 90K

Эта статья посвящена наиболее часто используемым комбинациям клавиш при работе в командной строке Linux (в основном в командном интерпретаторе bash).

Она точно будет полезна начинающим своё знакомство с Linux и, уверен, пригодится тем, кто уже имеет опыт (не всегда годы практики учат работать быстрее).

Никогда не развивал навыка быстрой печати, но знание не одного десятка hotkey'ев, перечисленных в этом материале, позволяет набирать команды со скоростью мысли.

Я попытался продемонстрировать многие примеры при помощи анимированных gif'ок – иногда несколько кадров больше скажут, чем несколько абзацев текста.

Читать далее
Всего голосов 143: ↑142 и ↓1 +141
Комментарии 64

Защита ядра Linux из ARM Trustzone: как усилить Linux Kernel Runtime Guard и предотвращать последствия zero-day

Время на прочтение 10 мин
Количество просмотров 6.3K


Всем привет! В ОС Аврора мы уделяем большое внимание обеспечению безопасности. Сегодня немного расскажем о перспективном подходе — синергии технологии ARM TrustZone и open-source проекта Linux Kernel Runtime Guard (LKRG) для повышения защищённости девайсов (в том числе от zero-day уязвимостей). Поговорим о том, что такое вообще ARM TrustZone, продукт Аврора ТЕЕ, пройдёмся по внутреннему миру LKRG и его ограничениям. Затем о том, как с использованием доверенной среды исполнения можно преодолеть эти ограничения, для того чтобы LKRG можно было рассматривать для применения в продакшене ОС.

Cтатья была подготовлена по материалам доклада нашего коллеги Антона Рыбакова на конференции OS-DAY 2020 https://youtu.be/jjYJKZK_bas

Итак, для начала краткое содержание:


• О технологии ARM TrustZone и Аврора ТЕЕ
• О проекте Linux Kernel Runtime Guard
• Ограничения Linux Kernel Runtime Guard
• Устранение недостатков с помощью ARM TrustZone

Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 24

5 диаграмм, необходимых для документирования архитектуры решений

Время на прочтение 8 мин
Количество просмотров 69K

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

Читать далее
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 3

Трюки с виртуальной памятью

Время на прочтение 14 мин
Количество просмотров 17K

Я уже довольно давно хотел написать пост о работе с виртуальной памятью. И когда @jimsagevid в ответ на мой твит написал о ней, я понял, что время пришло.

Виртуальная память — очень интересная штука. Как программисты, мы прекрасно знаем, что она есть (по крайней мере, во всех современных процессорах и операционных системах), но часто забываем о ней. Возможно, из-за того, что в популярных языках программирования она не присутствует в явном виде. Хотя иногда и вспоминаем, когда наш софт начинает тормозить (а не падать) из-за нехватки физической оперативной памяти.

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

Читать далее
Всего голосов 43: ↑39 и ↓4 +35
Комментарии 24

Шпаргалка полезных команд GDB

Время на прочтение 3 мин
Количество просмотров 43K

Для кого она нужна?


1) начинающих реверсеров, знающих особенности обратного проектирования, и желающих изучить такой отладчик как GDB


2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать

Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 11

Linux-контейнеры в паре строчек кода

Время на прочтение 5 мин
Количество просмотров 6.3K
В продолжение прошлой статьи о KVM публикуем новый перевод и разбираемся, как работают контейнеры на примере запуска Docker-образа busybox.

Эта статья о контейнерах является продолжением предыдущей статьи о KVM. Я бы хотел показать, как именно работают контейнеры, запустив Docker-образ busybox в нашем собственном небольшом контейнере.

В отличие от понятия «виртуальная машина», термин «контейнер» очень расплывчатый и неопределенный. Обычно мы называем контейнером — автономный пакет кода со всеми необходимыми зависимостями, которые могут поставляться вместе и запускаться в изолированной среде внутри операционной системы хоста. Если вам кажется, что это описание виртуальной машины, давайте погрузимся в тему глубже и рассмотрим, как реализованы контейнеры.
Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 0

Устойчивое хранение данных и файловые API Linux

Время на прочтение 10 мин
Количество просмотров 8.9K
Я, исследуя устойчивость хранения данных в облачных системах, решил проверить себя, убедиться в том, что понимаю базовые вещи. Я начал с чтения спецификации NVMe для того чтобы разобраться с тем, какие гарантии, касающиеся устойчивого хранения данных (то есть — гарантии того, что данные будут доступны после сбоя системы), дают нам NMVe-диски. Я сделал следующие основные выводы: нужно считать данные повреждёнными с того момента, как отдана команда записи данных, и до того момента, как завершится их запись на носитель информации. Однако в большинстве программ для записи данных совершенно спокойно используются системные вызовы.

В этом материале я исследую механизмы устойчивого хранения данных, предоставляемые файловыми API Linux. Кажется, что тут всё должно быть просто: программа вызывает команду write(), а после того, как работа этой команды завершится, данные будут надёжно сохранены на диске. Но write() лишь копирует данные приложения в кеш ядра, расположенный в оперативной памяти. Для того чтобы принудить систему к записи данных на диск, нужно использовать некоторые дополнительные механизмы.



В целом, этот материал представляет собой набор заметок, касающихся того, что я узнал по интересующей меня теме. Если очень кратко рассказать о самом важном, то получится, что для организации устойчивого хранения данных надо пользоваться командой fdatasync() или открывать файлы с флагом O_DSYNC. Если вам интересно в подробностях узнать о том, что происходит с данными на пути от программного кода к диску, взгляните на эту статью.
Читать дальше →
Всего голосов 33: ↑33 и ↓0 +33
Комментарии 2

Использование таймеров systemd вместо заданий cron

Время на прочтение 20 мин
Количество просмотров 68K
Сейчас я занимаюсь заменой моих cron-заданий на таймеры systemd. Я пользовался таймерами несколько лет, но обычно в тонкости их применения особо не углублялся, разбираясь лишь с тем, что нужно было для выполнения интересующей меня задачи. Недавно я работал над серией материалов про systemd и узнал о том, что systemd-таймеры обладают некоторыми очень интересными возможностями.



Эти таймеры, как и задания cron, могут, в заданное время, вызывать выполнение различных действий в системе. Например — запуск скриптов командной оболочки или программ. Таймеры могут срабатывать, например, раз в день, причём — только по понедельникам. Ещё один пример — срабатывание таймера каждые 15 минут в рабочее время (с 8 утра до 6 вечера). Но таймеры systemd могут кое-что такое, что недоступно заданиям cron. Например, таймер может вызвать скрипт или программу через заданное время после некоего события. Таким событием может быть загрузка системы или запуск systemd, завершение предыдущей задачи или даже завершение работы сервиса, вызванного ранее по таймеру.
Читать дальше →
Всего голосов 67: ↑67 и ↓0 +67
Комментарии 16

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

Время на прочтение 10 мин
Количество просмотров 169K


В устройствах Apple есть прекрасная функция Airdrop — она сделана для пересылки данных между устройствами. При этом никакой настройки и предварительного сопряжения устройств не требуется, все работает из коробки в два клика. Для передачи данных используется надстройка над Wi-Fi, и поэтому данные передаются с огромными скоростями. При этом используя некоторые трюки, можно не просто пересылать файлы, но и узнать телефонный номер человека, находящегося с тобой в одном вагоне метро.

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

Под катом я расскажу за всю хурму.
Компания RUVDS.COM не несёт ответственности за повторение действий описанных в данном материале.
Читать дальше →
Всего голосов 308: ↑294 и ↓14 +280
Комментарии 174

Персональное облако

Время на прочтение 9 мин
Количество просмотров 159K


Облачное хранилище позволяет не только хранить данные, но и обеспечивать совместную работу с ними в NAS.

Читать дальше →
Всего голосов 23: ↑18 и ↓5 +13
Комментарии 49

saneex.c: try/catch/finally на базе setjmp/longjmp (C99) быстрее стандартных исключений C++¹

Время на прочтение 19 мин
Количество просмотров 12K

Пока писал эту сугубо техническую статью, Хабр успел превратиться в местное отделение ВОЗ и теперь мне даже стыдно ее публиковать… но в душе теплится надежда, что айтишники еще не разбежались и она найдет своего читателя. Или нет?




Меня всегда восхищала стандартная библиотека Си, да и сам Си — при всей своей минималистичности от них так и веет духом тех самых первых красноглазиков хакеров. В черновике первого официального стандарта (ANSI C, он же C89, он же ANS X3.159-1989, он же, позднее, C90 и IEC 9899:1990) определяется 145 функций и макросов, из них около 25 — это вариации (ввиду отсутствия в языке перегрузок), а 26 чисто математических. K&R во второй редакции² приводят 114 функций (плюс математические), считая остальные за экзотику. В черновике³ C11 функций уже 348, но больше сотни — математика, а еще штук 90 это «перегрузки». А теперь посмотрим на Boost, где одних только библиотек — 160. Чур меня…


И среди этой сотни-полутора функций всегда были: обработка сигналов, вариативные функции (которые до интерпретируемого PHP дошли 25 лет спустя, а в Delphi, бурно развивавшемся одно время, их нет до сих пор) и порядка 50 строковых функций вроде printf() (м-м-м… JavaScript), strftime() (…) и scanf() (дешевая альтернатива регуляркам).



А еще всегда были setjmp()/longjmp(), которые позволяют реализовать привычный по другим языкам механизм исключений, не выходя за рамки переносимого Си. Вот о них и поговорим — Quake World, стеки, регистры, ассемблеры и прочая матчасть, а вишенкой будет занятная статистика (спойлер: Visual Studio непостоянна, как мартовский заяц, а throw saneex.c в два раза быстрее всех).


Текста много, не порежьтесь!
Всего голосов 43: ↑42 и ↓1 +41
Комментарии 44

Как превратить «столетний» usb-хаб в «умный» управляемый и сэкономить при этом 300$

Время на прочтение 13 мин
Количество просмотров 76K

Как-то давно понадобился мне хаб, желательно с большим количеством портов и c достаточно удобной формой, пригодной для встраивания вместо флоппи-дисковода в отсек 3,5''. Беглый просмотр барахолки подкинул модель D-link DUB-H7, да еще и в комбинации «2 по цене 1». Внешний осмотр ничего особенного не дал, хаб как хаб, сделан добротно, капитальный «принтерный» USB AM-BM на оборотной стороне и 3 А блок питания. Как всегда первым делом разобрал, порадовался малому количеству пустых мест вместо элементов вкупе с качественной пайкой и успокоился. Правда на всякий случай зашел в интернет посмотреть, а что это за хаб и есть ли интересные проекты с его участием. Проектов не оказалось, отзывы пользователей 50/50, в общем, никакой динамики. Хаб на протяжении 5-7 лет довольно сносно работал и выполнял свою задачу, потом плавно переместился в коробку для электронного хлама и вполне возможно сгинул бы в итоге вместе с безызвестными переходниками, адаптерами и т. п. Но произошло у меня в жизни событие, которое заставило-таки меня покопаться в мешках со старым барахлом, найти этот, как оказалось уникальный D-link, и стряхнув пыль извлечь его на божий свет. Если интересно послушать зачем — добро пожаловать под cut.


миг-миг-миг
Читать дальше →
Всего голосов 57: ↑55 и ↓2 +53
Комментарии 34

Как конкуренты могут легко заблокировать ваш сайт

Время на прочтение 4 мин
Количество просмотров 63K
Недавно мы столкнулись с ситуацией, когда ряд антивирусов (Касперский, Quttera, McAfee, Norton Safe Web, Bitdefender и несколько менее известных) начали блокировать наш сайт. Изучение ситуации привело меня к пониманию, что попасть в список блокировки крайне просто, достаточно нескольких жалоб (даже без обоснования). Детальнее проблему я опишу дальше.

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

Читать дальше →
Всего голосов 155: ↑152 и ↓3 +149
Комментарии 191

5 малоизвестных секретов Pandas

Время на прочтение 5 мин
Количество просмотров 18K

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

Для новичков: Pandas — это высокопроизводительный набор инструментов для анализа данных на Python с простыми и удобными структурами данных. Название произошло от понятия «panel data», эконометрического термина, которым называют данные о наблюдениях одних и тех же субъектов в течение разных периодов времени.

Здесь можно скачать Jupyter Notebook с примерами из статьи.
Читать дальше →
Всего голосов 45: ↑45 и ↓0 +45
Комментарии 2

Когда фильтр Блума не подходит

Время на прочтение 9 мин
Количество просмотров 15K


Я ещё с университета знал о фильтре Блума — вероятностной структуре данных, названной в честь Бёртона Блума. Но у меня не было возможности её использовать. В прошлом месяце такая возможность появилась — и эта структура буквально очаровала меня. Впрочем, вскоре я нашёл у неё некоторые недостатки. В этой статье — рассказ о моей краткой любовной связи с фильтром Блума.
Читать дальше →
Всего голосов 50: ↑49 и ↓1 +48
Комментарии 15

Сказ о том, как я автоматизировал квартиру с помощью Node-RED. Часть II

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


Всего голосов 63: ↑60 и ↓3 +57
Комментарии 23

Linux. Настройка клавиатуры

Время на прочтение 7 мин
Количество просмотров 95K

Для чего вообще специально настраивать клавиатуру?


Можно пользоваться и стандартными настройками, но иногда внесенные изменения дают возможность набирать быстрее (это, конечно, не слепая печать, но все же), совершать меньше ошибок, меньше переключать раскладку...


Почему я захотел изменить свою клавиатуру?


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


Во-вторых, через некоторое время я стал пользоваться вимовскими комбинациями для навигации в браузере, дальше — тайловый оконный менеджер i3, где они тоже использовались, и хотелось перейти на них везде (вместо обычных стрелок, например, в файловом менеджере).

Читать дальше →
Всего голосов 35: ↑33 и ↓2 +31
Комментарии 63

XKB: перенастроим клавиши под себя любимого

Время на прочтение 8 мин
Количество просмотров 96K
В один прекрасный день надоедает нажимать Shift, чтобы вывелся символ ~ вместо `.
Надоедает тянуться до Esc, при этом клавишей CapsLock пользуетесь РЕДКО.
Надоедает смещать кисть вниз и нажимать Ctrl/Cmd/Win слабым мизинчиком, либо, не дай бог, тянуться до них большим пальцем.
Надоедает лезть за PgUp, PgDn, Home и End, двигая руку каждый раз, чтобы всего лишь промотать страницу вниз.
Надоедает каждый раз, когда вы делаете опечатку, со злобой смотреть на клавиатуру в поисках кнопки Backspace.



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

Зачем это всё?


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

Многие раскладки для печати (Dvorak, Colemak и т.п.) сильно улучшают расположение клавиш, ставя их ближе к тем местам, куда нужно меньше тянуться. Но при этом совершенно забывают о модификаторах, спец. символах и командных клавишах (Enter, Backspace, Tab, Esc, Delete). А мы подумаем о том, как улучшить существующее положение вещей.

В статье пойдём от простейших изменений, до более интересной и глубокой настройки. И, как в конце хороших фильмов, я оставлю читателя подумать, что делать дальше, и не дам готового рецепта на всё. В конце концов, идеальных и универсальных решений нет, и на раскладку клавиатур товарищей нет.
Читать дальше →
Всего голосов 64: ↑53 и ↓11 +42
Комментарии 97

Информация

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