Рубрика «Занимательные задачки»

Троичные вычисления

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

В прошлой статье я подробно рассказал для чего мне это нужно: это будет демонстрационная железка. Не поленитесь, ознакомьтесь с моей мотивацией.

Итак, вот список опубликованных статей цикла (будет обновляться):

Напоминаю, что единственным строительным блоком вычислителя будет троичный мультиплексор. Вот фотография оригинального тримукса дизайна Александра Шабаршина и моего исполнения на поверхностном монтаже. Одна такая плата несёт на себе два троичных (де-)мультиплексора:

Считаем до трёх: два - 1

Читать полностью »

Угадай фильтр по импульсной характеристике - 1

На некотором сайте, в некотором форуме, добрый молодец по прозвищу SciFi озадачил коллектив свой историей.
Нашел он в руководящих технических материалах иноземной фирмы Texis Instrument [FSK Modulation and Demodulation With the MSP430 Microcontroller] требуемый ему цифровой фильтр. Но иноземцы шибко хитры оказались, и в исходном коде привели следующее:
Читать полностью »

Haskell: об одном методе реализации функций с переменным числом параметров - 1

– А видела ты Черепаху «Как бы»?
– Нет, – сказала Алиса. – Я даже не знаю, кто это такой.
– Как же, – сказала Королева. – Это то, из чего делают «Как бы черепаший суп».

                  Льюис Кэрролл, 
                           «Алиса в Стране чудес»

— Судя по твоим речам, ты хорошо знаешь Фангорн? — спросил в ответ Арагорн.
— Какое там! — отозвался старик. — На это ста жизней не хватит. Но я сюда иной раз захаживаю.

                 Джон Р. Р. Толкиен, 
                          «Властелин Колец» — к слову о моём знании Haskell ;)

Homines dum docent, discunt. (Объясни другим — сам поймёшь.)

                 народная латинская поговорка

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

Казалось бы о каком переменном числе параметров может идти речь при таком раскладе? Однако поразмыслив, посмотрев исходники printf или просто почитав wiki.haskell становится очевидным, что как раз ФП даёт ключ к достаточно красивому, хотя и несколько «казуистическому» решению этой задачи.

В настоящей публикации я рассмотрю один из способов реализации такого механизма на простых примерах, а также предложу некоторое обобщённое решение на базе Template Haskell, для превращения семейства обычных функций с последним параметром типа список в функцию с «как бы с переменным числом параметром» (далее по тексту просто «с переменным числом параметром»).
Читать полностью »

image
Жилой массив людей. Нет, серьёзно.

Холивары между ценителями Си и приверженцами его "сына" в лице C++ начались ещё до моего рождения и прекратятся разве что после смерти обоих этих языков и меня заодно. Адепты великого творения Кернигана-Ритчи до последней секунды рабочего дня готовы доказывать аксиомы приспешникам Страуструпа про вечность Си и его невероятную гибкость. Те в ответ им по-свойски советуют лучше порадоваться рабочему дню, ведь он вот-вот окажется последним – двадцать первому веку кроссплатформенный ассемблер не нужен. Распаляясь, сторонники Си приводят давно прошедшие через голову навылет миллионы тезисов "почему Си лучше C++", при этом каждый раз подчёркивая, что второй все достоинства первого растерял ещё будучи в отцовской утробе, попутно утратив лик человеческий. Обвиняемая сторона в обиде не остаётся и… а хотя постойте, о чём это я.

Я люблю Си, уважаю C++ и не переношу холивары (честно). При этом я осознаю, что в Си действительно не хватает многого, и яркий тому пример – отсутствие удобной работы с данными. В C++ эту проблему во многом решает STL и свойства самого языка. На мой студенческий взгляд, здесь особо отличается всем знакомый std::vector. Если стало интересно, как я реализовал его аналог средствами C89 – прошу под кат.

Читать полностью »

Розовый скафандр, криптовалюта и генномодифицированный iOS: задания online-этапа NeoQUEST-2017 и немного статистики - 1 C 1 по 10 марта прошёл online-этап соревнования по кибербезопасности NeoQUEST-2017. Пришло время подвести итоги, поделиться любопытной статистикой прохождения, а также вкратце рассказать про сами задания.
Читать полностью »

Троичные вычисления

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

Я выбрал сбалансированную троичную систему, в которой один трит может представлять одно из трёх значений -1, 0 или 1. Весьма подробно о ней можно почитать тут.

На любые вопросы из разряда «зачем?!» я отвечаю заранее: «Because I can».

Считаем до трёх - 1

Читать полностью »

В Университете ИТМО продолжается подготовка к приему будущих бакалавров, магистров и аспирантов — проходят Дни открытых дверей, олимпиады для школьников и Конгресс молодых ученых.

О том, как устроена Приемная кампания-2017, сегодня расскажет Анна Веклич, первый заместитель председателя Приемной комиссии, начальник Департамента по стратегическим коммуникациям Университета ИТМО.

В этом материале мы постарались собрать все, что нужно абитуриенту: от статистики прошлых лет до устройства мегафакультетов Университета и бонусов при поступлении.

Большое интервью: как поступить в Университет ИТМО - 1Читать полностью »

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

image

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

Вы уверены что знаете JavaScript? В таком случае предлагаю вам рассмотреть список моих собственных задач, которые я предлагаю на собеседованиях (на один из проектов крупного банка). Как показала статистика ни один кандидат не смог правильно ответить на все перечисленный вопросы, будь то Junior или Senior. Зато сразу видно кто из кандидатов умеет самостоятельно размышлять, а это довольно ценный навык. Итак, поехали!
Читать полностью »

Поиск уязвимости методом фаззинга и разработка шеллкода для её эксплуатации - 1 Для поиска уязвимостей все средства хороши, а чем хорош фаззинг? Ответ прост: тем, что он дает возможность проверить, как себя поведёт программа, получившая на вход заведомо некорректные (а зачастую и вообще случайные) данные, которые не всегда входят во множество тестов разработчика.

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

В этой статье мы:

  • продемонстрируем, как фаззить обработчик JSON-запросов;
  • используя фаззинг, найдём уязвимость переполнения буфера;
  • напишем шеллкод на Ассемблере для эксплуатации найденной уязвимости.

Разбирать будем на примере исходных данных задания прошлого NeoQUEST. Известно, что 64-хбитный Linux-сервер обрабатывает запросы в формате JSON, которые заканчиваются нуль-терминатором (символом с кодом 0). Для получения ключа требуется отправить запрос с верным паролем, при этом доступа к исходным кодам и к бинарнику серверного процесса нет, даны только IP-адрес и порт. В легенде к заданию также было указано, что MD5-хеш правильного пароля содержится где-то в памяти процесса после следующих 5 символов: «hash:». А для того, чтобы вытащить пароль из памяти процесса, необходима возможность удалённого исполнения кода.
Читать полностью »