Как стать автором
Обновить
0
0
Дмитрий Н @WorkND

Разработчик С/C++

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

Беспроводная точка доступа, используя Linux

Время на прочтение9 мин
Количество просмотров132K
Что ж, вот и первая статья из обещанной серии.
Первое, что я буду делать — настраивать Software AP, или беспроводную сеть на базе компьютера. На этом этапе, конечно, нужен доступ к консоли сервера с правами рута. Кроме того, нужно также подключение к интернету НЕ через внутреннюю вайфай-карточку — кабелем, через 3G-модем, короче, как пожелаете, но только не по вайфаю, который мы будем использовать для создания беспроводной сети. Я на первое время подключил и сервер, и ноут, с которого управлял сервером, в одну сеть по кабелю — так надёжнее всё-таки. Буду использовать пакет hostapd — он довольно известен как надёжное решение и мануалов под него достаточно, а для DHCP и DNS серверов буду использовать dnsmasq — решение как раз под домашние сети, его использует DD-WRT, не удивлюсь, если кто-то ещё.
Читать дальше →
Всего голосов 42: ↑29 и ↓13+16
Комментарии67

CORS для чайников: история возникновения, как устроен и оптимальные методы работы

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


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

Если вы давно хотели разобраться в CORS и вас достали постоянные ошибки, добро пожаловать под кат.

Ошибка в консоли вашего браузера


No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/

Access to fetch at ‘https://example.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy.


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

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

Но давайте-ка пойдем к истокам…
Читать дальше →
Всего голосов 41: ↑40 и ↓1+57
Комментарии14

Service Workers. Инструкция по применению

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


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

Проблема в том, что до сих пор нет хорошего механизма управления кэшем ресурсов и результатов сетевых запросов. В своей статье я хочу рассказать как Service Worker (SW) может помочь в решении этой задачи. Объясню в формате рецептов — какие элементы и в какой пропорции смешать, чтобы получить нужный результат, исходя из задачи и требований.
Поехали!
Всего голосов 57: ↑57 и ↓0+57
Комментарии40

Одно PWA, чтоб править всеми

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

Термин PWA появился еще в 2015 году, но из-за браузерных разногласий долгое время был лишь красивой идеей. В 2023 году возникла надежда, что на iOS появятся альтернативные браузерные движки, а это может привести к тому, что для создания почти полноценных аналогов нативных приложений будет достаточно знаний фронтенда.

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

Делимся расшифровкой доклада и видеозаписью. Повествование будет от лица Никиты.

Читать далее
Всего голосов 24: ↑22 и ↓2+29
Комментарии3

OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%

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


Много где написано о том, как получить 100% и A+ по тесту от Qualys. При всём при том практически везде директивы ssl_ciphers и подобные даются как эдакие магические строки, которые нужно просто вставить, и надеяться, что автор не подводит вас под монастырь. Эта статья призвана исправить это недоразумение. По прочтению этой статьи директива ssl_ciphers потеряет для вас всякую магию, а ECDHE и AES будут как друзья да братья.


Также вы узнаете почему 100% по тестам — не всегда хорошо в реальности.

Читать дальше →
Всего голосов 66: ↑65 и ↓1+64
Комментарии92

Выборочный обход блокировок на маршрутизаторах с прошивкой Padavan и Keenetic OS

Время на прочтение23 мин
Количество просмотров374K
Инструкций с разными вариантами обхода блокировок Интернет-ресурсов опубликовано огромное количество. Но тема не теряет актуальности. Даже всё чаще звучат инициативы на законодательном уровне заблокировать статьи о методах обхода блокировок. И появились слухи, что Роскомнадзор получит ещё одну пачку денег налогоплательщиков на «более лучшие» блокировки. Опытные пользователи ничего нового и полезного из статьи не узнают. А вот другие получат готовые пошаговые инструкции для простого и эффективного выборочного обхода блокировок на популярных маршрутизаторах с прошивкой Padavan и Keenetic.


Читать дальше →
Всего голосов 36: ↑32 и ↓4+28
Комментарии0

Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все

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

Три месяца назад здесь на Хабре была опубликована статья “Интернет-цензура и обход блокировок: не время расслабляться”, в которой простыми примерами показывалось, что практически все популярные у нас для обхода блокировок VPN- и прокси-протоколы, такие как Wireguard, L2TP/IPSec, и даже SoftEther VPN, SSTP и туннель-через-SSH, могут быть довольно легко детектированы цензорами и заблокированы при должном желании. На фоне слухов о том, что Роскомнадзор активно обменивается опытом блокировок с коллегами из Китая и блокировках популярных VPN-сервисов, у многих людей стали возникать вопросы, что же делать и какие технологии использовать для получения надежного нефильтрованного доступа в глобальный интернет.

Мировым лидером в области интернет-цензуры является Китай, поэтому имеет смысл обратить на технологии, которые разработали энтузиасты из Китая и других стран для борьбы с GFW (“великим китайским файрволом”). Правда, для неподготовленного пользователя это может оказаться нетривиальной задачей: существует огромное количество программ и протоколов с похожими названиями и с разными не всегда совместимыми между собой версиями, огромное количество опций, плагинов, серверов и клиентов для них, хоть какая-то нормальная документация существует нередко только на китайском языке, на английском - куцая и устаревшая, а на русском ее нет вообще.

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

Читать далее
Всего голосов 126: ↑124 и ↓2+153
Комментарии136

Личный сервер shadowsocks за 10 минут без затрат (часть 3)

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

Это - отдельное руководство, описывающее ещё один способ получить личный
прокси-сервер shadowsocks бесплатно и служащее продолжением к моей предыдущей статье. В этот раз мы воспользуемся сервисом Replit.

В этот раз всё будет намного проще: регистрация, импорт, запуск. Три шага.

Читать далее
Всего голосов 23: ↑20 и ↓3+19
Комментарии55

Точечная маршрутизация на роутере с OpenWrt. WireGuard и DNSCrypt

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров146K
Данный материал не является призывом к действию и публикуется исключительно в образовательных целях.

UPD 14.10.2023
Эта статья немного устарела. Здесь можно узнать, как использовать готовые списки IP-адресов, что не совсем актуально. Актуальная статья с маршрутизацией по доменам: https://habr.com/ru/articles/767464/


UPD 16.10.2022


  • Исправлены конфиги для Openwrt 22
  • Добавлен community список
  • В скрипт добавлена проверка загрузки файлов. Которая решает проблему, если при старте устройства не удалось сразу загрузить списки
  • DNSCrypt изменён на DNSCrypt v2

UPD 15.03.2023


  • Добавлена логика для работы с доменами, используются список доменов из community
  • Изменена проверка загрузки файлов в скрипте
  • В Ansible playbook теперь можно выбрать определённые списки

UPD 20.04.2023
Если у вас роутер получает IPv6 адрес, то роутинг будет работать криво. Пока нет инструкции для IPv6, поэтому нужно будет его выключить на роутере.


Часть 2: Поиск и исправление ошибок


Чем отличается от подобных материалов?


  • Реализация на чистом OpenWrt
  • Использование WireGuard
  • Конфигурация роутера организуется с помощью конфигов OpenWrt, а не кучей в одном скрипте
  • Предусмотрены ситуации при рестарте сети и перезагрузке
  • Потребляет мало ресурсов роутера: подсети содержатся в ipset, а не в таблицах маршрутизации. Что позволяет развернуть это дело даже на слабых устройствах
  • Автоматизация конфигурации с помощью Ansible (не требуется python на роутере)
Читать дальше →
Всего голосов 62: ↑61 и ↓1+60
Комментарии107

BPF для самых маленьких, часть первая: extended BPF

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

В начале была технология и называлась она BPF. Мы посмотрели на нее в предыдущей, ветхозаветной, статье этого цикла. В 2013 году усилиями Алексея Старовойтова (Alexei Starovoitov) и Даниэля Боркмана (Daniel Borkman) была разработана и включена в ядро Linux ее усовершенствованная версия, оптимизированная под современные 64-битные машины. Эта новая технология недолгое время носила название Internal BPF, затем была переименована в Extended BPF, а теперь, по прошествии нескольких лет, все ее называют просто BPF.


Грубо говоря, BPF позволяет запускать произвольный код, предоставляемый пользователем, в пространстве ядра Linux и новая архитектура оказалась настолько удачной, что нам потребуется еще с десяток статей, чтобы описать все ее применения. (Единственное с чем не справились разработчики, как вы можете видеть на кпдв ниже, это с созданием приличного логотипа.)


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

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

Отладка C при помощи пакета Cosmopolitan Libc

Время на прочтение12 мин
Количество просмотров3.7K
Cosmopolitan Libc предоставляет набор отладочных возможностей, повышающих удобство разработки на C: трассировка вызовов функций, интеграция с gdb, среда выполнения ASAN/UBSAN и многое другое! На C написано много быстрого и критически важного кода. Если вы пользуетесь программами, написанными на C, если вам приходится предусматривать интерфейсы для работы с библиотеками на C, исправлять баги в коде на C, либо даже переписывать имеющуюся на С программу на каком-то другом языке, то именно этот инструмент помогает понять, что делается в вашем коде на C. Отладка – это не просто россыпь инструкций printf. В этом посте будет рассмотрено, как Cosmopolitan Libc помогает наверняка и как следует отлаживать код C. Все примеры находятся в этом репозитории.
Читать дальше →
Всего голосов 11: ↑8 и ↓3+8
Комментарии2

Какого провайдера VPS выбрать для собственного сервера в 2023 году. Платим за всё российской картой

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

Иметь свой VPS для VPN довольно выгодно. Нет ограничений по количеству клиентов, можно обеспечить VPN подключением всех своих родных, друзей и знакомых. При этом можно за это платить 160-300 рублей в месяц. И если общедоступные VPN вовсю банятся по DNS и IP, то личные VPN пока что избегают этой участи.

Минусы есть, это администрирование сервера и отсутствие разнообразия географии.

Для VPN нужен зарубежный сервер, а с зарубежными сервисами в России уже больше года есть проблемы с оплатой. Но есть российские компании, которые предоставляют зарубежные сервера и при этом им можно платить с помощью российской карточки.
Я зарегистрировался в дюжине провайдеров, до покупки VPS дошёл у пяти. А после тестов остались только трое.

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

Python 3.5; async/await

Время на прочтение5 мин
Количество просмотров282K
Тихо и незаметно (с), вышел Python версии 3.5! И, безусловно, одно из самых интересных нововведений релиза является новый синтаксис определения сопрограмм с помощью ключевых слов async/await, далее в статье об этом.

Поверхностный просмотр «PEP 0492 — Coroutines with async and await syntax» поначалу оставил у меня вопрос «Зачем это надо». Сопрограммы удовлетворительно реализуются на расширенных генераторах и на первый взгляд может показаться, что все свелось к замене yield from на await, а декоратора, создающего сопрограмму на async. Сюда можно добавить и возникающее ощущение, что все это сделано исключительно для использования с модулем asyncio.

Но это, конечно же, не так, тема глубже и интереснее.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии26

Как работает yield

Время на прочтение6 мин
Количество просмотров691K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Всего голосов 141: ↑136 и ↓5+131
Комментарии41

Абсолютно бесплатный VPN с бесплатного VPS

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

Думаю про VPN слышали все, и многим приходилось им пользоваться. При этом использование готового VPN, которым руководит какой - то неизвестный человек, не является хорошей идей. Тем более в России на данный момент пытаются блокировать, как сами VPN провайдеры (Windscribe, Proton и другие известные сервисы), так и сами протоколы.

Читать далее
Всего голосов 86: ↑82 и ↓4+88
Комментарии112

Fuchsia OS глазами атакующего

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

Fuchsia — это операционная система общего назначения с открытым исходным кодом, разрабатываемая компанией Google. Эта операционная система построена на базе микроядра Zircon, код которого написан на C++. При проектировании Fuchsia приоритет был отдан безопасности, обновляемости и быстродействию.

Как исследователь безопасности ядра Linux я заинтересовался операционной системой Fuchsia и решил посмотреть на нее с точки зрения атакующего. В этой статье я поделюсь результатами своей работы.

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

Происхождение и эволюция аллокатора памяти в С

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

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

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

Читать далее
Всего голосов 79: ↑78 и ↓1+102
Комментарии31

Visual Studio Code – редактор кода для Linux, OS X и Windows

Время на прочтение8 мин
Количество просмотров258K
За свою долгую историю существования Microsoft выпустил немало инструментов разработки. Но так уж сложилось что на слуху у всех только лишь Visual Studio – большая и мощная IDE «комбайн» предназначенная для всего и вся. Развивается этот продукт уже более двух десятков лет и вобрал в себя самые разные функции. Многим этот инструментарий нравится и иногда даже задавали вопрос – будет ли перенесен Visual Studio на другие платформы. На что чаще всего получали ответ нет. Наверное, понятно почему, в целом такое портирование будет дорогим и неоправданно сложным, уж очень много всего в этой IDE завязано на Windows.

И вот, этой весной для многих неожиданностью было то что Microsoft представил новый продукт под названием Visual Studio Code, да еще и работающий сразу на трех платформах, Linux, OS X и Windows. Не замахиваясь на все функции полноценной IDE, внутри Microsoft решили переосмыслить подход, по которому строится основной инструментарий программиста и начали с самого главного – редактора кода. Visual Studio Code это именно редактор, но при этом обладающий функциями IDE, полагающийся на расширения.



Уже сейчас вы можете использовать Visual Studio Code для создания веб-проектов ASP.NET 5 или Node.js (в чем-то даже удобнее чем в «взрослой» Visual Studio), использовать различные языки, такие как JavaScript, TypeScript, C#, работать с пакетными менеджерами npm, скаффолдингом yeoman и даже осуществлять отладку. Плюсом ко всему будет отличный «интеллисенс», поддержка сниппетов кода, рефакторинг, навигация, многооконность, поддержка git и многое другое.
Читать дальше →
Всего голосов 45: ↑33 и ↓12+21
Комментарии46

SD – это Linux, а Midjourney – Mac: краткое полное руководство по Stable Diffusion

Время на прочтение13 мин
Количество просмотров80K
Вот таких тирекс-тянок выдает нейросеть

Текст про Midjourney привлек внимание, и в комментариях наметилась дискуссия про Stable Diffusion. Аргументы убедили меня попробовать SD самостоятельно, но вскоре я понял, что это не самая простая задача. Сообщество любителей Stable Diffusion произвело на свет множество удобных инструментов, которые своим количеством и сложностью могут отпугнуть новичков.

Всю неделю, что я экспериментировал с нейросетью, я боролся с желанием SD добавлять вторичные гендерные признаки по моим запросам и грустил, смотря на результаты генерации котиков. О своих страданиях частично писал в личном Telegram-канале — подписывайтесь! В этом же тексте — собрал основные советы по работе со Stable Diffusion и подвел итог, сравнив эту нейросеть с Midjourney.
Читать дальше →
Всего голосов 84: ↑83 и ↓1+104
Комментарии53

Механизмы контейнеризации: cgroups

Время на прочтение11 мин
Количество просмотров113K
механизмы контейнеризации

Продолжаем цикл статей о механизмах контейнеризации. В прошлый раз мы говорили об изоляции процессов с помощью механизма «пространств имён» (namespaces). Но для контейнеризации одной лишь изоляции ресурсов недостаточно. Если мы запускаем какое-либо приложение в изолированном окружении, мы должны быть уверены в том, что этому приложению выделено достаточно ресурсов и что оно не будет потреблять лишние ресурсы, нарушая тем самым работу остальной системы. Для решения этой задачи в ядре Linux имеется специальный механизм — cgroups (сокращение от control groups, контрольные группы). О нём мы расскажем в сегодняшней статье.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии4

Информация

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