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

WEB-программист, сетевой администратор

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

История Git: на этот раз не так весело

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

Линус Торвальдс как-то написал в своей книге, что создавал Linux для развлечения, но в итоге это привело к революции. Git, его второе творение, также оказалось «случайной революцией» — и сегодня это стандартный инструмент для людей в ИТ. Однако процесс его создания был уже не таким «весёлым» — по крайней мере, для самого Линуса. 

Читать далее
Всего голосов 98: ↑97 и ↓1+113
Комментарии56

Как устроены серийники для Windows, и как восстановить стёршийся COA

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров24K

Эта история начинается с того, что я попытался переустановить Windows на ноутбуке, доставшемся мне вот с такой наклейкой Certificate of Authenticity (COA): часть символов серийника видны хорошо, остальные – в большей или меньшей степени угадываются; но несколько попыток ввести серийник «на глаз» успехом не увенчались. Пришлось углубляться в вопрос подробнее.

Читать далее
Всего голосов 126: ↑125 и ↓1+163
Комментарии29

Изучение различных видов сортировок

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров7.6K

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

Читать далее
Всего голосов 19: ↑6 и ↓13-2
Комментарии17

Альтернативный список заблокированных в РФ ресурсов Re:filter

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

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

Получилось реализовать в достаточно компактные списки доменов и адресов, которые не перегрузят среднестатистическое устройство, но при этом список будут разделять заблокированные ресурсы и не позволят, например, пускать через VPN трафик на незаблокированные ресурсы, а значит не нарушат работу сервисов, онлайн игр и т.д. непредсказуемым образом

Читать далее
Всего голосов 120: ↑120 и ↓0+138
Комментарии58

Всё своё ношу с собой. Мои простые правила организации личной базы знаний

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

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

А потом высокоскоростной Интернет нас избаловал — мы перестали скачивать файлы и формировать свои собственные локальные библиотеки знаний и контента. Теперь всё лежит на сайтах и в облаках. Зачем что-то скачивать, если всё это моментально доступно по одному клику?

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

Читать далее
Всего голосов 75: ↑67 и ↓8+76
Комментарии140

Асинхронный SQLAlchemy 2: простой пошаговый гайд по настройке, моделям, связям и миграциям с использованием Alembic

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

Наконец-то пришло время взяться за то, что я давно планировал — подробный гайд по асинхронной версии SQLAlchemy 2.0 в стиле ORM. В этой серии статей я подробно расскажу обо всех аспектах: от создания моделей и установления связей между ними до миграций с Alembic и взаимодействия с данными в базе. Мы будем шаг за шагом разбирать ключевые моменты работы с асинхронной базой данных, что позволит вам глубже понять SQLAlchemy и применить эти знания на практике.

Для начала, давайте разберёмся, что такое SQLAlchemy и почему каждый разработчик, работающий с реляционными базами данных (такими как SQLite, PostgreSQL, MySQL и т. д.), должен знать о ней. После этого — настройка. Мы будем работать с PostgreSQL, но не переживайте: код, который мы напишем, универсален для всех реляционных баз данных. Мы начнем с базовой настройки SQLAlchemy для асинхронного взаимодействия, а затем перейдём к созданию таблиц в современном декларативном стиле.

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

Почтовый сервер с нуля. Часть третья

Уровень сложностиСложный
Время на прочтение17 мин
Количество просмотров12K

В этой заключительной статье мы подробно рассмотрим процесс настройки почтового сервера с использованием Docker и Exim4, Dovecot, PostfixAdmin и RainLoop. Наша цель — создать полностью функциональный и масштабируемый почтовый сервер, который легко управляется благодаря контейнеризации.

Давайте настраивать
Всего голосов 23: ↑23 и ↓0+26
Комментарии16

Ведение дел – мой опыт

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров6.5K

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

Создать свой список дел!
Всего голосов 23: ↑20 и ↓3+21
Комментарии11

OSINT: Разведка в ЕВРОПЕ

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

В статье на сегодня пойдёт разговор про OSINT на территории Европы.
Тема обширная, европа разношерстная, стран много, людей много, менталитет местами разный.

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

Итак, начнем с GEOINT и его основ.

Часовые пояса

Континент Европа разделен на следующие часовые пояса:
Часовой пояс Азорских островов (UTC-1);
Западноевропейский часовой пояс / Часовой пояс по Гринвичу/
Ирландский часовой пояс (UTC+0);
Центрально европейское время (UTC+1);
Восточноевропейское время (UTC+2);
Калининградский часовой пояс (UTC+2);
Восточноевропейский часовой пояс и Московский часовой пояс (UTC+3).

Часовой пояс достаточно сильно сужает объем мест поиска.
Так например, если вам попалась фотография с метаданными (что с одной стороны редкость, а с другой реальность), то в ней может быть прописано дата её создания или редактирования. Эта дата обычна указана в формате timestamp - это формат хранения даты и времени с учетом часового пояса.

Кстати, чтобы вы знали, для метаданных есть куча онлайн и офлайн утилит для их просмотра.

К примеру exiftool, вот пример её работы.

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

Как настроить двухфакторную аутентификацию через Telegram для SSH

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров12K

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

Двухфакторная аутентификация (2FA) – это мощный инструмент, который значительно повышает уровень безопасности, требуя подтверждения вашей личности с помощью второго фактора. В этом контексте, двухфакторная аутентификация через Telegram представляет собой эффективное решение, которое можно легко интегрировать в процесс SSH-подключения.

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

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

Читать далее
Всего голосов 25: ↑23 и ↓2+24
Комментарии35

Бинарный поиск на пальцах

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров9.3K

В этой статье мы разберемся с тем, как работают массивы, что такое алгоритмы, и как устроен бинарный поиск "под капотом"

Читать далее
Всего голосов 8: ↑5 и ↓3+4
Комментарии26

Telegram Mini App. Как создать Web App с нуля

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров42K

Mini Apps (или же WebApps) - это относительно новый и удобный способ добавления веб приложения прямо в интерфейсе приложения Telegram. Используя JavaScript, становится возможным создавать бесконечное множество интерфейсов, которые смогут заменить полноценный веб-сайт.

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

И сегодня мы попробуем создать miniapp приложение, взаимодействующее с данными пользователя.

Приступим

Читать далее
Всего голосов 19: ↑18 и ↓1+21
Комментарии11

Пишем FastAPI с нуля на python

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

FastAPI — это современная, быстрая (высокопроизводительная) веб-инфраструктура для создания API-интерфейсов с Python 3.7+ на основе стандартных подсказок типов Python.

В этой статье мы рассмотрим как написать его с нуля.

Читать далее
Всего голосов 14: ↑12 и ↓2+11
Комментарии8

Obsidian: синхронизация без боли

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров38K

Легкий и простой способ настроить бесплатную синхронизацию Obsidian между всеми своими устройствами.

Читать далее
Всего голосов 35: ↑34 и ↓1+39
Комментарии131

Чистый код: инверсия зависимостей (DIP)

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5K

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

Вот такое сложное определение. Где, «Проще говоря», только больше запутывает чем поясняет, хотя все передает верно. Этот принцип пожалуй самый сложный для объяснений, хотя его суть очевидна.

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

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

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

Читать далее
Всего голосов 13: ↑6 и ↓7+3
Комментарии5

Как сменить технологию и не закопаться в рефакторинге: опыт внедрения DDD в проект на FastAPI — Часть 2

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.6K

Привет, хабравчане!

В первой части были рассмотрены паттерны проектирования Repository и Unit of Work.

Это вторая часть цикла о DDD. В ней расскажу, как добавить к проекту событийно-ориентированную архитектуру.

Код подопытного приложения ищите в репозитории по ссылке. Подробнее о DDD и паттернах Repository и Unit of Work читайте в первой части по ссылке...

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии2

Как нарисовать квадрат 3 × 3 см на веб-странице*

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

* Не привлекая внимания санитаров

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

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

Что ж, вызов был брошен. И я поставил себе задачу (вы же тоже сами ставите себе задачи?) — нарисовать красивый красный квадратик размером 3 × 3 см. Тому, что у меня в итоге получилось, и посвящён мой необычный рассказ. 

Читать далее
Всего голосов 117: ↑108 и ↓9+118
Комментарии50

От PuTTY до МС22: сравниваем SSH-клиенты

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров18K

На сегодняшний день SSH-клиентов написано множество: от встроенных в ОС терминалов до отечественных решений вроде МС22. Я решил протестировать популярные варианты и сравнить, какой будет лучше.

Читать далее
Всего голосов 29: ↑15 и ↓14+9
Комментарии60

Postman: почтальон на страже API

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров6.2K

Привет! Меня зовут Бальцер Вадим, я QA-инженер в команде android направления Банки.ру. Сегодня поделюсь нашим опытом внедрения автотестов обратной совместимости и интеграции их в CI. 

В материале расскажу: 
1) зачем нашей команде понадобились автотесты для контроля обратной совместимости API, почему мы выбрали Postman CI.
2) с чего начали: базовые вещи + полезные советы для начинающих.
3) есть ли жизнь за гранью проверок схемы.
4) CI и интеграция с ТестОпс.
5) к чему пришли и какие перспективы видим.

Также добавлю примеры примеры кода и небольшие советы, которые могут пригодиться, если вы еще только присматриваетесь к Postman как к инструменту автоматизации проверок API.

Читать далее
Всего голосов 14: ↑13 и ↓1+16
Комментарии2

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

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

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

Привет! Меня зовут Ваня, я ведущий инженер по информационной безопасности в Selectel. В этом материале разберу, какие порты наиболее интересны хактивистам и как быть в курсе актуальных уязвимостей. А в конце поделюсь чек-листом с планом действий при обнаружении открытых портов в своей инфраструктуре. Подробности под катом!
Читать дальше →
Всего голосов 57: ↑53 и ↓4+66
Комментарии26

Информация

В рейтинге
Не участвует
Откуда
Екатеринбург, Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность