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

Занимательные задачки

Разминаем мозги

Сначала показывать
Порог рейтинга
Уровень сложности

Криптовалюта Ethereum: пишем эксплойт под уязвимый умный контракт и получаем токены

Время на прочтение 10 мин
Количество просмотров 29K
Сколько копий уже сломано в разговорах о криптовалюте? Банки и государственные учреждения спорят о ее правовом статусе, а частные организации придумывают различные способы применения блокчейна. Мы же задумались о безопасности этой технологии и связанных с ней продуктов.

На примере задания NeoQUEST-2017 разбираемся с умными контрактами Ethereum – второй по популярности криптовалюты после Биткойна. Участникам соревнования предстояло написать эксплойт к уязвимому контракту. О том, как это сделать — читаем под катом!
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 6

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

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


На некотором сайте, в некотором форуме, добрый молодец по прозвищу SciFi озадачил коллектив свой историей.
Нашел он в руководящих технических материалах иноземной фирмы Texas Instruments [FSK Modulation and Demodulation With the MSP430 Microcontroller] требуемый ему цифровой фильтр. Но иноземцы шибко хитры оказались, и в исходном коде привели следующее:
Читать дальше →
Всего голосов 74: ↑71 и ↓3 +68
Комментарии 36

Первый в мире поисковый движок: Исторический экскурс

Время на прочтение 5 мин
Количество просмотров 9.3K
В ранние годы интернет-эры миллионы файлов хранились на тысячах анонимных FTP-сайтов. В этом многообразии пользователям было достаточно сложно обнаружить программу, подходящую для решения их задачи.

Более того, они заранее не знали, существует ли искомый инструмент. Поэтому приходилось вручную просматривать FTP-хранилища, структура которых значительно отличалась. Именно эта проблема и привела к появлению одного из ключевых аспектов современного мира — интернет-поиска.

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

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

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

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

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

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

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


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


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

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

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

Истории

Аналог std::vector из C++11 на чистом C89 и как я его писал

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

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


Холивары между ценителями Си и приверженцами его ублюдка сына в лице C++ начались ещё до моего рождения и прекратятся разве что после смерти обоих этих языков и меня заодно.


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


а хотя постойте, о чём это я.


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

Читать дальше →
Всего голосов 58: ↑56 и ↓2 +54
Комментарии 67

Розовый скафандр, криптовалюта и генномодифицированный iOS: задания online-этапа NeoQUEST-2017 и немного статистики

Время на прочтение 7 мин
Количество просмотров 4.7K
C 1 по 10 марта прошёл online-этап соревнования по кибербезопасности NeoQUEST-2017. Пришло время подвести итоги, поделиться любопытной статистикой прохождения, а также вкратце рассказать про сами задания.
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 2

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

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

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


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



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

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


Читать дальше →
Всего голосов 85: ↑83 и ↓2 +81
Комментарии 64

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

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

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

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

Читать дальше →
Всего голосов 26: ↑20 и ↓6 +14
Комментарии 9

Все программисты попадают в #ТАЙ

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

image

Если вы думаете, что быть программистом просто, то вы ошибаетесь. Если думаете, что трудно, то тоже ошибаетесь. Так кто такой программист, как писать крутой код и что отличает хороший тон от плохого в Таиланде или без него разбираемся с анонимусом.
Читать дальше →
Всего голосов 77: ↑47 и ↓30 +17
Комментарии 123

Настоящий герой в мире программирования: кто он?

Время на прочтение 3 мин
Количество просмотров 8.5K
В нашем мире, где в списке самых богатых людей находятся финансисты и бизнесмены, для многих начинающих специалистов это является основной мотивацией для выбора будущей профессии: придумаю следующий Facebook, найду разработчиков и разбогатею.

Но что если сегодня больше не нужны новые Марки Цукерберги? Может быть достаточно быть простым работягой, хорошо выполняющим свои обязанности, чтобы «спасти» этот мир?

Читать дальше →
Всего голосов 19: ↑12 и ↓7 +5
Комментарии 4

Поиск уязвимости методом фаззинга и разработка шеллкода для её эксплуатации

Время на прочтение 9 мин
Количество просмотров 22K
Для поиска уязвимостей все средства хороши, а чем хорош фаззинг? Ответ прост: тем, что он дает возможность проверить, как себя поведёт программа, получившая на вход заведомо некорректные (а зачастую и вообще случайные) данные, которые не всегда входят во множество тестов разработчика.

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

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

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

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

Секрет быстрого программирования: не задумывайтесь

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

Программировать быстро — это легко! Так считает инженер-программист компании Google, который все публикации в своем блоге подписывает лаконичным «Макс». Макс также работает главным архитектором, комьюнити-менеджером и релиз-менеджером в Bugzilla Project. Мы в Alconost впечатлились и перевели его советы о том, можно ли как научиться программировать с космической скоростью.

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

Они, конечно, правы в том, что в условиях сжатых сроков разработчики, как правило, будут писать сложный код. Впрочем, дедлайны не должны приводить к сложности. Вместо фразы «Этот дедлайн помешал мне написать простой код» можно произнести равноценную: «Я недостаточно быстро программирую, чтобы писать просто». То есть чем быстрее вы как программист — тем меньше влияния на качество вашего кода имеют дедлайны.

Теперь давайте разберемся, как, собственно, стать быстрее? Может, это врожденное магическое умение? Надо ли быть «умнее» других, чтобы быть быстрым?

Нет, это вообще не магия и не врожденный дар. На самом деле существует всего одно простое правило, считаясь с которым, со временем вы полностью решите проблему:
Читать дальше →
Всего голосов 45: ↑34 и ↓11 +23
Комментарии 47

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

Время на прочтение 3 мин
Количество просмотров 10K
Всем привет, я написал клавиатурный тренажер под Android в Unity3D, он не сильно заточен под особых детей, а предназначен для широкого пользователя (ну я так думаю). И в этом посте я хочу рассказать о проблеме перекрывания части экрана клавиатурой и способах ее решения.


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

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн

Tarantool: Хороший, Плохой, Злой

Время на прочтение 19 мин
Количество просмотров 36K
image Многие слышали о NoSQL базе данных Tarantool, знают о том, что она умеет хранить данные в памяти, очень быстро их обрабатывает и обладает высокой производительностью. Тарантул был написан серьезными ребятами, которые обслуживают сервисы с сотнями тысяч запросов в секунду.

Система кажется сложной. Несмотря на российские корни, изначально даже не было документации на русском языке. Чем же может помочь этот мощный инструмент обычным парням — программистам и начинающим разработчикам? Остальные могут сразу посмотреть результат

Попробуем написать простой занимательный сервис, способный выдержать большую нагрузку. И никакого SQL!
Начнем!
Всего голосов 38: ↑35 и ↓3 +32
Комментарии 11

Анализ взаимодействия мобильных Android-приложений с API социальных сетей Facebook, Instagram, ВКонтакте

Время на прочтение 4 мин
Количество просмотров 13K
Не секрет, что большинство крупных сервисов на серверной стороне используют какой-либо API (Application Programming Interface) для взаимодействия с различными клиентами.

На «очной ставке» NeoQUEST-2016 Максим Хазов рассказал о различных подходах к определению и использованию скрытого серверного API-функционала на примере таких популярных сервисов, как ВКонтакте, Instagram, Facebook.

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

Намекнём: «прогулки» по социальным сетям ещё предстоят участникам NeoQUEST-2017, регистрация на online-этап которого идет полным ходом!
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 2

Дедлайн конкурса Stepik Contest продлен до 31 марта, самое время создавать IT-задачи

Время на прочтение 3 мин
Количество просмотров 4.6K
Новогодние праздники и январь прошли очень быстро и вместо большого количества курсов для конкурса Stepik Contest команда Stepik получила множество запросов с просьбами продлить дедлайн. Мы решили продлить срок конкурса до 31 марта, а сейчас — подвести промежуточные итоги, ответить на вопросы и разъяснить все неочевидные моменты конкурса.

Итак, конкурс Stepik Contest, дедлайн 31 марта, чтобы выиграть от $2K до $10K, нужно создать 20+ задач по темам IT на платформе Stepik (adaptive.stepik.org).


Подробности про конкурс
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 8

Будут ли роботы стоять в пробках?

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

Эта история началась с того что я застрял в пробке на хайвее, не особенно большой, но полчаса простоял практически на месте. И, как это часто бывает, пробка рассосалась сама по себе — не было впереди ни аварии, ни ремонта, просто машины в какой-то момент начали двигаться быстрее, еще быстрее, и все — свободная дорога впереди.


Чем обычно занимаются в пробках? Ну кто-чем и когда-как, а я в тот день был в мирном философском настроении — просто сидел и размышлял. Вспомнил в частности пост на Гиктаймс о робомобилях где в комментариях бурно сравнивали манеру вождения людей и роботов и в конце кажется пришли к выводу что будущее на дорогах за AI, при нем и движение станет безопаснее и средняя скорость возрастет. Интересно, а пробки тогда будут? Другими словами, насколько пробки обусловлены внешними (обьективными) обстоятельствами, и насколько эффектом толпы, агрессивной или наоборот тормозной манерой вождения? Заодно вспомнилась прочитанная когда-то книга где утверждалось что моделирование дорожного трафика — одна из самых сложных математических задач, которая до сих пор не решена. Ну это наверное давно уже неправда, читал я это давно и книга уже тогда была не новой, сейчас уже наверняка и теории правильные написали, и на компьютерах своих все посчитали. Хотя… пробки же остались? В общем, полет фантазии было уже не остановить.


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


И еще одно — я убежденный сторонник думанья головой, поэтому в этом посте компьютерного моделирования не будет, вообще совсем не будет, только хардкорный карандаш и бумага.


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

Регистрация открыта или NeoQUEST, ты просто космос

Время на прочтение 3 мин
Количество просмотров 3.9K
Вжух — и мы уже открыли регистрацию на onine-этап ежегодного соревнования по кибербезопасности NeoQUEST-2017!

В этом году online-этап NeoQUEST пройдёт с 1 по 10 марта: захватим 3 выходных дня! О том, какие задания ждут участников на этот раз, и при чём тут космос — читаем под катом.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 0

Открытые онлайн-курсы от Университета ИТМО

Время на прочтение 7 мин
Количество просмотров 34K
Не так давно в нашей подборке полезных материалов речь шла о поступлении в вуз. Однако пройти обучение у преподавателей Университета ИТМО можно и без поступления — достаточно записаться на открытый онлайн-курс Университета и попробовать свои силы в программировании, фотонике, реологии, оптике и других направлениях, которые развивает Университет ИТМО. Возможно, такой курс поможет кому-то определиться с направлением обучения и будущих исследований или лучше подготовиться к вступительным испытаниям (что особенно актуально, например, для поступающих в магистратуру).

Всего голосов 24: ↑23 и ↓1 +22
Комментарии 25

Экзамен для будущих «русских хакеров» в Московском Политехе

Время на прочтение 8 мин
Количество просмотров 32K
И снова здравствуйте. Обычно я пишу статьи в качестве разработчика, но сегодня хочется поделиться опытом проведения экзамена по информационной безопасности в Московском Политехе. По-моему получилось довольно интересно. Задание даже может быть полезным начинающим тестировщикам и пентестерам. Но вначале я немного расскажу про то, как проходили занятия в течении семестра — чтобы было понятно, как мы дошли до жизни такой.


Читать дальше →
Всего голосов 38: ↑32 и ↓6 +26
Комментарии 35