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

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

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

Rust: качаем ленту и парсим JSON

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

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


У нас все вылилось в очень лаконичный код. Как? Смотрите под катом.

Читать дальше →

Защита от DDoS на уровне веб-сервера

Время на прочтение5 мин
Количество просмотров48K
Статистика DDoS-атак показывает неизменный рост и смещение вектора с сетевого уровня на уровень приложений.

image

Если у Вас есть небольшой сайт на сервере с минимальными характеристиками, то положить его можно любым вполне легальным средством стресс-тестирования. (Не рекомендую этого никому делать т.к. IP-адрес легко вычисляется и экспериментатор может влететь на возмещение ущерба.) Поэтому сайт без защиты от DDoS очень скоро будет выглядеть так же дико, как компьютер с Windows-98 без анивирусника.
Читать дальше →

CoffeeMiner: взлом WiFi для внедрения криптомайнера в HTML-страницы

Время на прочтение7 мин
Количество просмотров30K
Предупреждение: эта статья и проект имеют исключительно образовательные цели.

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

Цель этой статьи — объяснить, как провести атаку MITM (человек посередине) для внедрения определённого JavaScript-кода в страницы HTML, чтобы заставить все устройства, подключённые к WiFi, майнить криптовалюту для злоумышленника.

Задача состоит в создании скрипта, который проводит автономную атаку в сети WiFi. Это то, что мы назвали CoffeeMiner, поскольку атаки такого типа можно проводить в кафе.
Читать дальше →

Грузите апельсины бочках. Релизы в Golang проектах

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

Данная статья является продолжением инструментальной темы, затронутой в прошлой публикации. Сегодня мы постараемся разобраться со сборкой релизов Golang приложений в виде единого исполняемого файла, включающего ресурсные зависимости, и вопросом оптимизации размера итоговой сборки. Также рассмотрим процесс построения рабочего окружения отвечающего следующим требованиям:


  1. Переносимость. Окружение должно быть легко воспроизводимо на различных машинах.
  2. Изолированность. Окружение не должно влиять на версии установленных библиотек и программ на машине разработчика.
  3. Гибкость. Окружение должно позволять собирать релизы для различных версий Golang и Linux (разные версии дистрибутивов и glibc).
  4. Повторяемость. Не должно быть магии и тайных знаний, то есть все шаги сборки проекта и зависимостей должны быть описаны кодом.
Читать дальше →

Введение в современную сетевую балансировку и проксирование

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

Недавно я осознал нехватку вводных обучающих материалов о современной сетевой балансировке и проксировании. Я подумал: «Почему так? Балансировка нагрузки — одна из ключевых концепций для построения надёжных распределённых систем. Ведь должна быть доступна качественная информация об этом?» Я поискал и обнаружил, что информации мало. Статьи в Википедии о балансировке и прокси-серверах содержат обзоры некоторых концепций, но не могут похвастаться последовательным описанием предмета, особенно в том, что касается современных микросервисных архитектур. Поиск в Google информации о балансировке в основном возвращает сайты вендоров, заполненные модными терминами и скупые на подробности.


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

Читать дальше →

Как написать собственный игровой движок на C++

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

Перевод статьи Джеффа Прешинга (Jeff Preshing) How to Write Your Own C++ Game Engine.


Как написать собственный игровой движок на C++


В последнее время я занят тем, что пишу игровой движок на C++. Я пользуюсь им для создания небольшой мобильной игры Hop Out. Вот ролик, записанный с моего iPhone 6. (Можете включить звук!)



Hop Out — та игра, в которую мне хочется играть самому: ретро-аркада с мультяшной 3D-графикой. Цель игры — перекрасить каждую из платформ, как в Q*Bert.


Hop Out всё ещё в разработке, но движок, который приводит её в действие, начинает принимать зрелые очертания, так что я решил поделиться здесь несколькими советами о разработке движка.


С чего бы кому-то хотеть написать игровой движок? Возможных причин много:

Изучаем структуры MBR и GPT

Время на прочтение9 мин
Количество просмотров184K
Для работы с жестким диском его для начала необходимо как-то разметить, чтобы операционная система могла понять в какие области диска можно записывать информацию. Поскольку жесткие диски имеют большой объем, их пространство обычно разбивают на несколько частей — разделов диска. Каждому такому разделу может быть присвоена своя буква логического диска (для систем семейства Windows) и работать с ним можно, как будто это независимый диск в системе.

Способов разбиения дисков на разделы на сегодняшний день существует два. Первый способ — использовать MBR. Этот способ применялся еще чуть ли не с появления жестких дисков и работает с любыми операционными системами. Второй способ — использовать новую систему разметки — GPT. Этот способ поддерживается только современными операционными системами, поскольку он еще относительно молод.
Читать дальше →

Подборка бесплатных утилит компьютерной криминалистики (форензики)

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

В этой статье представлены бесплатные инструменты для проведения расследования инцидентов информационной безопасности.
Читать дальше →

Lua. Краткое введение в метатаблицы для чайников

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

На написание данной статьи меня сподвигло большое количество вопросов по метатаблицам и ООП в Lua, благо это самый сложный и проблематичный раздел у изучающих данный язык, но, так как Lua проектировалась как язык для начинающих и не-программистов и, в целом, имеет небольшой объём материала для освоения, негоже оставлять её «на потом», учитывая что с помощью метатаблиц можно творить чудеса и крайне элегантные решения заковыристых задач.
Читать дальше →

10 самых популярных сайтов для соревнований программистов на начало 2018 года

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


В конце 2016 года была опубликована аналогичная статья. С тех пор список был обновлен на основе наблюдений и анализа нескольких ресурсов (постов в популярных блогах, обсуждений на Quora, поисковых запросов в Google и обсуждений на форумах, таких как reddit/learnprogramming и Hacker News).

Предлагаем вниманию читателей обновленный список на 2018 год, который включает в себя 10 платформ, которые по личному мнению автора являются лучшими соревновательными площадками для программистов и содержат ресурсы, которые могут помочь начинающим и Intermediate-разработчикам совершенствовать свои навыки, подготовиться к собеседованию и продвинуться по своей карьерной лестнице.

На этих сайтах также можно просто посоревноваться с коллегами или развлечься, решая интересные головоломки. Порядок составления списка основан лишь на уровне сложности заданий: от начального до продвинутого.
Читать дальше →

Реверс-инжинеринг iPhone 2G

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

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


Для тех кто не в курсе первый айфон выглядит примерно так


image

Для проведения опытов нам понадобится сам телефон порвергнутый Jajebreak’у, программа IFunBox для просмотра и модификации системных файлов, дизассемблер IDA, HEX редактор.
На моем телефоне установлена IOS 3.1.3, но данные модификации будут работать и на других версиях(может быть).

Читать дальше →

Дополнение к статье «Тонкости резюме в немецкие IT-компании»

Время на прочтение3 мин
Количество просмотров12K
С интересом прочитал статью «Тонкости резюме в немецкие IT-компании». Так как я достаточно долго живу в Германии, то позволю себе несколько замечаний и дополнений, которые надеюсь будут полезны читателям Хабра и не обидят автора.

Начну с того, что за последние восемь лет я поменял три места работы, при этом не написав ни одного резюме.
Читать дальше →

Индексы в PostgreSQL — 9

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

В прошлых статьях мы рассмотрели механизм индексирования PostgreSQL, интерфейс методов доступа и следующие методы: хеш-индексы, B-деревья, GiST, SP-GiST, GIN и RUM. Тема этой статьи — BRIN-индексы.

BRIN


Общая идея


В отличие от индексов, с которыми мы уже познакомились, идея BRIN не в том, чтобы быстро найти нужные строки, а в том, чтобы избежать просмотра заведомо ненужных. Это всегда неточный индекс: он вообще не содержит TID-ов табличных строк.

Упрощенно говоря, BRIN хорошо работает для тех столбцов, значения в которых коррелируют с их физическим расположением в таблице. Иными словами, если запрос без предложения ORDER BY выдает значения столбца практически в порядке возрастания или убывания (и при этом по столбцу нет индексов).

Метод доступа создавался в рамках европейского проекта по сверхбольшим аналитическим базам данных Axle с прицелом на таблицы размером в единицы и десятки терабайт. Важное свойство BRIN, позволяющее создавать индексы на таких таблицах — небольшой размер и минимальные накладные расходы на поддержание.

Работает это следующим образом. Таблица разбивается на зоны (range) размером в несколько страниц (или блоков, что то же самое) — отсюда и название: Block Range Index, BRIN. Для каждой зоны в индексе сохраняется сводная информация о данных в этой зоне. Как правило, это минимальное и максимальное значения, но бывает и иначе, как мы увидим дальше. Если при выполнении запроса, содержащего условие на столбец, искомые значения не попадают в диапазон, то всю зону можно смело пропускать; если же попадают — все строки во всех блоках зоны придется просмотреть и выбрать среди них подходящие.

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

5 техник small talk для общения с иностранными коллегами

Время на прочтение5 мин
Количество просмотров18K
Каждый изучающий английский язык наверняка слышал хрестоматийные шутки про разговоры о погоде. В нашей культуре пустые разговоры, которыми, по сути, является small talk, не очень приняты. Вот светская беседа – другое дело. Но прежде чем дойдет до полноценной беседы, разговор все-таки нужно завязать. А если вам предстоит путешествие за границу, то нужно быть морально готовыми к тому, что там без small talk не обойдется даже поход в магазин. Если вам трудно говорить ни о чем и на отвлеченные темы, то эта статья для вас.


Читать дальше →

От мушкета до автомата — сумасшедшее столетие, часть 3/3

Время на прочтение55 мин
Количество просмотров54K
Итак, последняя из трех частей рассказа об эволюции стрелкового оружия от мушкета до автомата.

Использованные термины


УСМ – ударно-спусковой механизм

Метрическое обозначение патрона — состоит из двух чисел, первое из которых означает калибр, второе – длину гильзы. Например, 9х19 говорит о том, что 9мм – калибр, а длина гильзы 19мм. Но это обозначение все равно во многом номинально.

Пистолетный патрон – небольшой патрон с короткой тупоконечной пулей и с зарядом быстрогорящего пороха менее 0.5г. Напр. 9х19, 7.62х25, 9х18 и т.д.

image

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

Напр. 7.62х54R, 7.62х51, 7.92х57.

image

Промежуточный, переходной патрон – патрон по мощности промежуточный между пистолетным и винтовочным. Создан для автоматов, но находит широкое применение и в ручных пулеметах. Гильза бутылочной формы, масса порохового заряда ок. 1.5 г пороха со средней скоростью горения.

Напр. 7.92х33, 7.62х39.

image

Малоимпульсный патрон – условный тип промежуточного патрона, появившийся впервые в винтовке М16. Представляет собой промежуточный патрон, однако с дальнейшим уменьшением размеров и калибром ок. 5.5мм. Свое название получил из-за уменьшенного импульса отдачи. Масса порохового заряда ок. 1.5 г, порох обычно того же типа что и в промежуточном патроне.

Напр. 5.56х45, 5.45х39, 5.8х42.

image

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

Танчики в консоли, статья третья: «Сервер и клиент»

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

Добрый всем день!


И с наступившими праздниками!

Мой репозиторий с кодом внизу этой статьи.

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

Я слышу критику и стараюсь написать интересную статью с разбором этого проекта.

Глава 1: «Рабочий клиент»

Читать дальше →

Rust: «Небезопасные абстракции»

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

Ключевое слово unsafe является неотъемлемой частью дизайна языка Rust. Для тех кто не знаком с ним: unsafe — это ключевое слово, которое, говоря простым языком, является способом обойти проверку типов (type checking) Rust'а.


Существование ключевого слова unsafe для многих поначалу является неожиданностью.
В самом деле, разве то, что программы не "падают" от ошибок при работе с памятью,
не является особенностью Rust? Если это так, то почему имеется легкий способ обойти
систему типов? Это может показаться дефектом языка.


Но не все так просто, детали — под катом.

Читать дальше →

Как вести переговоры с англоговорящими коллегами: инструкция

Время на прочтение5 мин
Количество просмотров21K
Многие взрослые студенты начинают подтягивать свой английский в первую очередь для работы. Английский уже давно является языком международного бизнеса: где бы вы ни находились, с какими бы компаниями ни вели дела, чаще всего все переговоры и сделки по продаже ведутся на английском языке. Курсы бизнес-английского обычно знакомят вас с самой ходовой лексикой, например, названием должностей, структурой компаний и навыками бизнес-переписки. Но чаще всего вам придется вести переговоры, будь то переговоры по телефону или лично. С чего начать планирование переговоров и нужно ли их вообще планировать? Какая лексика потребуется в самом начале? Уместен ли small talk в бизнес-переговорах? Разбираемся с основами.


Читать дальше →

Подбираем пароли с помощью Google Chrome

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

Согласно многочисленным исследованиям в области компьютерной безопасности, в ТОП-3 уязвимостей информационных систем входит подбор пароля.


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


В случае, если мы имеем какой-либо портал, где пользователи – это люди, то бОльшую часть уязвимых слабых паролей можно отнести к одной из 4 групп:


  1. Пароли, входящие в топ самых популярных фраз (такие как «123456», «password», и т.п.).
  2. Пароли, представляющие собой сочетание клавиш – так называемые keyboard-walks пароли (например, «qwerty», «qazwsx», и т.п.).
  3. Пароли – искажённые логины («user123», «user321», и т.п.).
  4. Либо использование в качестве пароля популярных русских слов или имён в «перевёрнутой» раскладке («ljcneg», «fylhtq»)
Читать дальше →

Шпаргалка по OTP (Erlang)

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

Наверное многим, кто начинал изучать Erlang и Open Telecom Platform (OTP), было непросто запомнить все возможные настройки супервизора или ген-сервера, а также порядок входящих аргументов и формат возвращаемых значений. Основная сложность заключается в том, что описание любого процесса, будь то инициализация супервизора или синхронный вызов ген-сервера, находится в разных частях одной страницы документации. В самом начале освоения OTP такая навигация приводит к потере контекста и замедлению обучения. Не найдя шпаргалки по OTP на просторах интернета, пришлось создать свою. Надеюсь, она поможет вам в изучении (все картинки на английском языке).

Читать дальше →

Информация

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