Pull to refresh
1
0
Send message

Необычный дуалбут: ноутбук с «двойным дном»

Reading time15 min
Views82K

Не так давно на Habr Q&A я наткнулся на интересный вопрос — как сделать, чтобы два жестких диска не видели друг друга? Чтобы вирус, попав на одну систему, никоим образом не мог заразить другую. В ответах предлагали достаточно стандартные способы — использовать полнодисковое шифрование, отключить диск в диспетчере устройств и даже поставить переключатель на питание. Но что если взглянуть на задачу совершенно с другого угла и сделать всё средствами самого HDD? Да-да, сегодня мы снова погружаемся в пучины модификации прошивок и реверс-инжиниринга!
Узнать подробности
Total votes 274: ↑270 and ↓4+353
Comments122

Грамматический разбор для естественных языков. Ч.2: Алгоритм Кока—Янгера—Касами (CYK)

Reading time8 min
Views4.1K

(Ч.1: Языки описания языков)

В идеале нам хотелось бы разбирать текст за линейное время и за один проход. Регулярные выражения это позволяют, но уже с CFG это не получится: например, S → A | B; A → a | x A; B → b | x B превращает строку x…xa в дерево из узлов A, а строку x…xb в дерево из узлов B — и пока разборщик не увидит последний символ строки, он не знает, что делать со всеми предыдущими символами. Поэтому на грамматики для языков программирования накладывают дополнительные ограничения — по сути, чтобы для разбора не приходилось "заглядывать вперёд" — позволяющие разбирать текст программы за один проход. Кто ковырялся в компиляторах, тот наверняка знаком с LL- и LR-разбором, и имеет опыт "подгонки" грамматики языка под требования конкретного алгоритма разбора. Но при работе с естественными языками нет возможности "подправить" язык для удобства разбора — приходится работать с тем языком, какой есть.

В 1960-х был разработан алгоритм CYK для разбора произвольного CFG. Считается, что впервые его опубликовали — независимо друг от друга — И. Сакаи из японского НИИ Минобороны в 1961 и Дж. Кок из Нью-Йоркского университета в 1962. В 1966 тот же самый алгоритм публиковали — опять независимо — Д. Янгер из General Electric и Т. Касами из Университета Иллинойса. Янгер в своей публикации упоминает имена Кока и Сакаи, но не ссылается ни на какие конкретные их работы: по всей видимости, работы Кока и Сакаи Янгеру — как и мне сейчас — не были доступны. Чтобы никому из изобретателей алгоритма не было обидно, его называют в честь сразу троих, хотя они, скорее всего, даже не были между собой знакомы.

Читать далее
Total votes 14: ↑11 and ↓3+13
Comments2

Что я не знал про образование

Reading time14 min
Views106K


Я тут полез изучать опыт школьных учителей в педагогике, — и совершенно внезапно обнаружил кучу важных для управления проектами принципов. В смысле, что я опять хочу познакомить вас со странным человеком и рассказать про его опыт. Итак, знакомьтесь, обычная учительница в астраханской гимназии, Ольга Анисимова, которая порвала мне все шаблоны того, что происходит в обычной школе.

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

Она относится к детям как ко взрослым во многих аспектах.

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

Она разрешает готовить шпаргалки и списывать. Разрешает детям «выпихивать» на ответ того, кто выучил тему. Использует понятную детям игрофикацию для мотивации.

В общем, всё настолько пропитано здравым смыслом, что просто не может и не должно происходить в школе. В чёртовой школе!
Читать дальше →
Total votes 166: ↑163 and ↓3+208
Comments482

Коммиты — это снимки, а не различия

Reading time14 min
Views47K

Git имеет репутацию запутывающего инструмента. Пользователи натыкаются на терминологию и формулировки, которые вводят в заблуждение. Это более всего проявляется в "перезаписывающих" историю командах, таких как git cherry-pick или git rebase. По моему опыту, первопричина путаницы — интерпретация коммитов как различий, которые можно перетасовать. Однако коммиты это не различия, а снимки! Я считаю, что Git станет понятным, если поднять занавес и посмотреть, как он хранит данные репозитория. Изучив модель хранения данных мы посмотрим, как новый взгляд помогает понять команды, такие как git cherry-pick и git rebase.

Читать далее
Total votes 35: ↑29 and ↓6+36
Comments55

Скрапинг современных веб-сайтов без headless-браузеров

Reading time9 min
Views26K


Многие разработчики считают скрапинг сложной, медленной и неудобной для масштабирования задачей, особенно при работе с headless-браузерами. По моему опыту, можно заниматься скрапингом современных веб-сайтов даже не пользуясь безголовыми браузерами. Это очень простой, быстрый и хорошо масштабируемый процесс.

Для его демонстрации вместо Selenium, Puppeteer или любого другого решения на основе безголовых браузеров мы просто используем запросы на Python. Я объясню, как можно скрапить информацию из публичных API, которые потребляет на фронтэнде большинство современных веб-сайтов.

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

Но существует и другой способ, которым можно довольно часто пользоваться.
Читать дальше →
Total votes 38: ↑28 and ↓10+28
Comments31

Как подружить .NET и IDA Pro (о дружбе C# и C++)

Reading time6 min
Views6.7K


Приветствую,


Сначала о проблеме/задаче:
Начав писать очередной плагин-отладчик для ретро-платформы под IDA Pro (по секрету: это будет SNES), я столкнулся со следующим набором, который требовалось подружить:


  1. Ядро эмулятора написано на C++ и компилируется в DLL
  2. GUI эмулятора написано на C# и использует DLL-ку ядра для управления эмуляцией
  3. IDA Pro, которая использует плагины либо на питоне, либо на C++ в виде DLL (а отладчики только на C++)
Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments17

Планирование спидрана Morrowind с помощью имитации отжига

Reading time19 min
Views36K
image

Ну ты и соня, тебя даже вчерашний шторм не разбудил. Говорят, мы уже приплыли в Морровинд. Нас выпустят и позволят нам сделать спидран, это точно!

Введение


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

Однако не существует категории спидранов Morrowind, в которой игрок стремится стать главой всех фракций. Несмотря на любовь критиков и отличный сюжет, большинство квестов Morrowind заключаются в заданиях «принеси вещь» или «убей этого типа», а квестов, в которых требуется что-то ещё, не так много. Но планирование такого маршрута спидрана всё равно может быть чрезвычайно интересным по следующим причинам:
Читать дальше →
Total votes 89: ↑89 and ↓0+89
Comments48

Docker. Начало

Reading time7 min
Views233K


Примерно такие же эмоции я и мои коллеги испытывали, когда начинали работать с Docker. В подавляющем большинстве случаев это происходило от недостатка понимания основных механизмов, поэтому его поведение казалось нам непредсказуемым. Сейчас страсти поутихли и вспышки ненависти происходят все реже и все слабее. Более того, постепенно мы на практике оцениваем его достоинства и он начинает нам нравиться… Чтобы снизить степень первичного отторжения и добиться максимального эффекта от использования, нужно обязательно заглянуть на кухню Docker'a и хорошенько там осмотреться.
Читать дальше →
Total votes 24: ↑22 and ↓2+20
Comments31

Information

Rating
3,992-nd
Registered
Activity