Pull to refresh
78
-14
Соловьев Сергей @AshBlade

Бэкэнд разработчик, но для ПМ могу быть кем угодно

Send message

Как передать информацию в ICMP-пакетах и не привлечь внимания санитаров

Reading time8 min
Views23K

Источник: polymerh.

На Хабре достаточно статей про передачу данных через протокол ICMP. Чего говорить, шесть лет назад я сам писал про стеганографию в IP-пакетах и «пингах». Но кажется, самое время вернуться к этой теме и предложить неочевидные методы.

Если вам кажется, что тема передачи данных в ICMP уже исчерпана и я не смогу вас удивить, то предлагаю извлечь данные из дампа сетевого трафика до прочтения статьи. То, что будет дальше, может ввести в недоумение.
Читать дальше →
Total votes 96: ↑95 and ↓1+122
Comments25

Секретная китайская плата: контроллер стиральной машины

Level of difficultyEasy
Reading time8 min
Views40K


Привет, Хабр! Лучшее профессиональное образование — максимально приближённое к реальной жизни. Как минимум в этом смысле пособия для конкурсов и экзаменов по электронике в китайских колледжах заслуживают звания одних из лучших.

Сегодня мы будем собирать почти настоящую плату управления стиральной машины и изучать алгоритмы её работы.

Разработчики набора не забыли добавить традиционную парочку ошибок, чтобы работа испытуемого заключалась не только в аккуратной установке деталей по предложенной схеме, но и сопровождалась пониманием того, как она должна работать, и что необходимо изменить, чтобы она заработала как надо.
Читать дальше →
Total votes 52: ↑51 and ↓1+74
Comments60

Сравнение структур разделов GPT и MBR

Reading time11 min
Views666K
Вы когда-нибудь задумывались о том, как загружается компьютер? Независимо от аппаратуры и операционной системы, все компьютеры при загрузке используют или традиционный метод BIOS-MBR, или более современный UEFI-GPT, реализованный в последних версиях ОС.

В этой статье мы сравним структуры разделов GPT и MBR; GPT означает GUID Partition Table, а MBR — Master Boot Record. Начнём с того, что разберём сам процесс загрузки.

В следующих главах выделяются различия между стилями разделов GPT и MBR, в том числе приводятся инструкции, как осуществить преобразование между двумя стилями, и советы, какой из них выбрать.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments38

Анатомия Hello World на языке C

Level of difficultyMedium
Reading time15 min
Views23K

Эта статья посвящена программе Hello World, написанной на C. Это максимальный уровень, на который можно добраться с языком высокого уровня, не беспокоясь при этом о том, что конкретно язык делает в интерпретаторе/компиляторе/JIT перед выполнением программы.

Изначально я хотел написать статью так, чтобы она была понятна любому, умеющему кодить, но теперь думаю, что читателю полезно иметь хотя бы некоторые знания по C или ассемблеру.
Читать дальше →
Total votes 125: ↑125 and ↓0+142
Comments47

Числа и байты: как работает память в Linux?

Level of difficultyHard
Reading time27 min
Views14K
image

Часть первая: физическая память


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

Также память включает в себя оперативное запоминающее устройство (ОЗУ) или RAM, где можно записывать и считывать информацию. Существует статическая ОЗУ (SRAM) и динамическая ОЗУ (DRAM), различающиеся в том, как хранится информация. В SRAM информация сохраняется до выключения питания, в то время как в DRAM используются транзисторы и конденсаторы, что позволяет хранить данные, но требует их периодического обновления. Разные типы ОЗУ имеют свои преимущества и недостатки, и выбор зависит от конкретных потребностей.

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

Но что такое физическая память, как она работает в Linux? Что такое сегментация, утечки памяти и некие «страницы»?

Все, что вы хотели знать, но боялись спросить о памяти пингвина — читайте здесь и сейчас!
Читать дальше →
Total votes 31: ↑31 and ↓0+35
Comments18

Как работает радио?

Level of difficultyMedium
Reading time8 min
Views18K

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

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


Если вы подзабыли какие-то из этих тем, то рекомендую сначала освежить память.
Читать дальше →
Total votes 64: ↑64 and ↓0+65
Comments51

Отказоустойчивая архитектура: почему Tarantool не падает?

Reading time8 min
Views6.8K


Основная проблема в высоконагруженных приложениях — отказоустойчивость. Нагрузка с упавших узлов в кластере должна переключаться на живые. Это кажется несложной задачей, но на практике появляется много подводных камней. Мы с yngvar_antonsson потратили много времени на поддержку различных кластеров, построенных на Tarantool и наших кластерных фреймворках Cartridge и TDG, и сегодня расскажем вам, как обеспечивается отказоустойчивость в наших приложениях. Будет интересно всем, кто хочет подробнее узнать, как устроен фейловер в Cartridge, и тем, кто хочет узнать о нашем опыте создания автоматических фейловеров.
Читать дальше →
Total votes 29: ↑27 and ↓2+41
Comments0

Повышаем живучесть Raft в реальных условиях

Reading time14 min
Views4.1K
Популярность алгоритма Raft в последние годы растёт. У него достаточно ясное описание, а реализации появляются во всё большем количестве проектов. На бумаге, будь то математика или рекламные статьи, выглядит хорошо. Но на практике не все обещания Raft можно реализовать без дополнительных решений.

Меня зовут Сергей Останевич. Я архитектор репликации в проекте Tarantool, платформе in-memory-вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. Над материалом этой статьи мы работали вместе с Бориславом Демидовым. Мы поделимся нашим опытом реализации Raft, расскажем о поддержке работоспособности кластера Tarantool в условиях частичной связности и приведём реальные примеры того, как чистый Raft не справился с задачей.


Читать дальше →
Total votes 42: ↑42 and ↓0+42
Comments4

Бизнес на Open-Source на примере Red Hat, Databricks, Grafana, Cloudera, Confluent, Elastic и других

Reading time8 min
Views3.1K

Open-Source почти везде. Почти в каждом проекте и информационной системе встречается какая-то часть кода, распространяемая под open-source лицензией. И это не просто небольшие фрагменты кода, а полноценные, зрелые, высококачественные продукты, которые развиваются и поддерживаются большими (и дорогими) командами. В данной статье я постараюсь разобраться в бизнес-моделях “бесплатного” софта.

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments5

Финансовый план и ценообразование для ИТ-продукта: Курс «Создание программного продукта и управление его развитием»

Reading time8 min
Views13K
Привет, Хабр! Мы продолжаем серию постов о продакт-менеджменте от компании Acronis, и сегодня речь пойдет о финансовом плане и ценообразовании. Мы поговорим о том, почему «план по продажам», как часть финансового плана — это “самая большая ложь”, рассмотрим примеры удачного и неудачного ценообразование, а также пройдемся по базовым финансовым параметрам, которые необходимы для запуска любого проекта, претендующего на получение прибыли.


Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments2

69 бизнес-моделей ИТ-компаний

Reading time3 min
Views43K


С ростом конкуренции возрастает и многообразие бизнес-моделей технологических стартапов, которые мы и постарались классифицировать. Мы адаптировали оригинальную подборку примеров, которую вы сможете дополнить, добавляя свои варианты в комментарии.
Читать дальше →
Total votes 33: ↑25 and ↓8+17
Comments1

Путь стартапа. От идеи до рабочего бизнеса. 18 шагов опыта

Reading time10 min
Views8K

Привет, меня зовут Максим Кульгин. Написал из нашего опыта, как с минимальными вложениями (насчитал прямых затрат на 95 500 руб.) можно сделать ИТ-бизнес в России. В этой статье вы не найдете такие термины, как: 'выгорание', 'питч', 'custdev', 'ментор', 'product market fit', 'k8s', 'mrr/cac/ltv', 'burn rate', 'криптокочевник', 'номад' и т. п. Просто шпаргалка по приземленным этапам, которые проходили мы сами.

Я никого не учу, пишу свое мнение из личного опыта, не считаю, что написанное ниже истина и уверен, что есть множество других «тропинок на вершину горы Фудзи». Более того, если вы поделитесь своим опытом в комментариях — буду признателен. Исхожу из того, что у вас в команде есть минимум два человека (техника и маркетинг). Сделал статью в виде простых шагов от идеи до рабочего бизнеса с максимальной детализацией, где это возможно. Разумеется, я учел не все, ведь скорее всего ваш путь будет отличаться от нашего.

Подчеркну — речь пойдет про то, как запустить ИТ- бизнес «с нуля» (пусть это будет SAAS, например — сервис транзакционных почтовых рассылок, взамен покинувших наш рынок западных аналогов) до первой выручки. Уже потом надо будет учить упомянутые в заголовке статьи нужные и важные термины.

Итак…попробую расписать по шагам.

1. Идея. Кто-то говорит, что идея имеет решающее значение, а кто-то уверен ровно наоборот — «идея ничего не стоит». Все наши рабочие идеи приходят от запросов клиентов, которые готовы за них платить, а все то, что придумали сами — потерянные деньги и время. Лично мне, например, нравится идея сделать SAAS для транзакционных писем, даже зарегистрировал домен mailcheap.ru (дальше регистрации дело не дошло).

Читать далее
Total votes 21: ↑15 and ↓6+11
Comments17

Создание бизнес-плана IT cтартапа: пошаговая детальная структура

Reading time3 min
Views32K
Для разработки своего IT стартапа (рекрутинговая веб-платформа) по крупицам создал детальную структуру бизнес-плана. Далее, проработав каждый пункт, получил ясную и понятную картину будущего Бизнеса. Структура охватывает все важные направления как для создателя, так и для инвестора. Адаптировано для рынков США и Европы.
Шерю для всех.

image

1.) Коротко о проекте (Что привносит проект на рынок?)
1.1.) Почему? (Мечта, видение, причина, вера, главная цель Бизнеса)
1.2.) Как? (миссия)
1.3.) Краткое описание сути Проекта
1.4.) Детальное описание Проекта
1.5.) Решаемые Проектом проблемы
1.6.) Долгосрочные цели проекта
1.7.) Бизнес-концепт: обзор проекта / описание ноу-хау

2). Функционал (Технологическое решение проекта)
2.1.) Краткое описание платформы
2.2.) Детальное описание платформы
2.3.) Дополнительные модули, услуги
2.4.) Тех. задание – веб платформа
Читать дальше →
Total votes 9: ↑8 and ↓1+14
Comments1

Как устроена страничная организация памяти x86_64

Level of difficultyEasy
Reading time15 min
Views8.7K

В этом посте я буду говорить о страничной организации только в контексте PML4 (Page Map Level 4), потому что на данный момент это доминирующая схема страничной организации x86_64 и, вероятно, останется таковой какое-то время.

Окружение

Это необязательно, но я рекомендую подготовить систему для отладки ядра Linux с QEMU + gdb. Если вы никогда этого не делали, то попробуйте такой репозиторий: easylkb (сам я им никогда не пользовался, но слышал о нём много хорошего), а если не хотите настраивать окружение самостоятельно, то подойдёт режим практики в любом из заданий по Kernel Security на pwn.college (вам нужно знать команды vm connect и vm debug).

Я рекомендую вам так поступить, потому что считаю, что самостоятельное выполнение команд вместе со мной и возможность просмотра страниц (page walk) на основании увиденного в gdb — хорошая проверка понимания.

Читать далее
Total votes 53: ↑53 and ↓0+53
Comments0

Миллион одновременных соединений на Node.js

Reading time9 min
Views104K


TL;DR:


  • Node.js v0.8 позволяет обрабатывать 1 млн одновременных HTTP Comet соединений на Intel Core i7 Quad/16 Gb RAM практически без дополнительных настроек.
  • На 1 соединение тратится чуть больше 10 Kb памяти (4.1 Kb Javascript Heap + 2.2 Kb Node.js Native + 3.8 Kb Kernel)..
  • V8 Garbage Collector не рассчитан на управление > ~500Mb памяти. При превышении нужно переходить на альтернативный режим сборки мусора, иначе «отзывчивость» сервера сильно уменьшается.
  • Подобный опыт можно (и нужно!) без особых затрат повторить самому (см. под катом).

Читать дальше →
Total votes 193: ↑187 and ↓6+181
Comments125

Миллион одновременных соединений

Reading time8 min
Views59K

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

Адрес TCP/IP поддерживает только 65000 подключений, поэтому придётся назначить этому серверу примерно 30000 IP-адресов.

Существует 65535 номеров TCP-портов, значит ли это, что к TCP-серверу может подключиться не более 65535 клиентов? Можно решить, что это накладывает строгое ограничение на количество клиентов, которые может поддерживать один компьютер/приложение.

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

Поэтому я написал эту статью, чтобы развеять данный миф с трёх сторон:

  1. Мессенджер WhatsApp и веб-фреймворк Phoenix, построенный на основе Elixir, уже продемонстрировали миллионы подключений, прослушивающих один порт.
  2. Теоретические возможности на основе протокола TCP/IP.
  3. Простой эксперимент с Java, который может провести на своей машине любой, если его всё ещё не убедили мои слова.

Если вы не хотите изучать подробности, то перейдите в раздел «Итоги» в конце статьи.
Читать дальше →
Total votes 82: ↑80 and ↓2+99
Comments27

Компилятор за выходные: таблицы символов

Level of difficultyMedium
Reading time9 min
Views7.7K

Как водится воскресным вечером, снова я с моим компилятором. На этот раз я расскажу, как работают области видимости переменных и как перегружать функции. Это позволит нам скомпилировать демку про́клятого огня, а также я накидал фантазию на тему игрушки арканоид (скриншот на КПДВ, видео в конце статьи). Я на удивление сам долго залипал на эту анимацию :)

На всякий случай я даю код и на wend, и на C, поскольку понимаю, что код на моём языке вряд ли интересен кому-то помимо того, кто реально возьмётся за компилятор. А вот мелкий код с интересными эффектами всегда найдёт свою публику. Кстати, если у вас есть идеи на тему чего-то интересного, что можно запрограммировать в полста строчек кода, делитесь в комментариях, я внимательно слушаю!

Читать далее
Total votes 26: ↑26 and ↓0+26
Comments2

Реверс-инжиниринг электромеханического компьютера с самолёта-истребителя

Level of difficultyMedium
Reading time14 min
Views22K

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

В истребителях F-101 и F-111, в бомбардировщике B-58 ВВС США эту задачу решал Bendix Central Air Data Computer (CADC)1.

[1. Мне не удалось найти полный список самолётов, в которых использовался CADC. Судя по различным источникам, он применялся в F-86, F-101, F-104, F-105, F-106, F-111, а также в бомбардировщике B-58.]

Это электромеханическое чудо техники было реализовано на основе лучших технологий 1955 года: шестерней, кулачков, сельсинов и магнитных усилителей. В этом посте я загляну внутрь CADC, расскажу о выполняемых им расчётах и объясню, как он производил эти расчёты механически.
Читать дальше →
Total votes 99: ↑96 and ↓3+127
Comments43

Когда TCP-сокеты отказываются умирать

Reading time10 min
Views31K

Когда TCP-сокеты отказываются умирать

В поисках причин, почему установленные соединения не разрываются в некоторых случаях, я набрёл на отличную статью в блоге Cloudflare. Которая в итоге помогла найти не только решение моей проблемы, но и помогла лучше понять как работают таймауты TCP соединений в Linux.

Читать далее
Total votes 66: ↑66 and ↓0+66
Comments5

Книги, о которых редко говорят

Reading time4 min
Views46K

Дал ему подборку книг, он приходит месяца через два, и с порога такой сразу:
— Я с друзьями не могу разговаривать.
— Ну да есть такой, недостаточек.
интервью Жака Фреско

Читать далее
Total votes 74: ↑72 and ↓2+87
Comments26
1

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Registered
Activity

Specialization

Backend Developer
Middle
C#
PostgreSQL
.NET
.NET Core
Python
Apache Kafka
High-loaded systems