Сообщения

Почему часто используют шестнадцатеричное представление для бинарных данных

Я раньше непонимал почему его вообще используют и зачем оно нужно. На самом деле это самый удобный способ представления бинарных данных человеку. Поскольку бинарная куча неразборчива для человека. Для него все эти единицы и нули сливаются в одну непонятную кучу. Поэтому использование hex для визуальной инспекции бинарной последовательности более удобно. Как мы все знаем 1 байт это 8 бит. 1 бит это 2 возможных значения (1 и 0). Получается 8 позиций по 2 размещения. То есть в 1 байте есть 2^8 (256) возможных состояния. Hex имеет 16 состояний 0-9 и A-F. 0--9 стостояний получается 10, и A-F (ABCDEF (6 стостяний)). И так удобно получилось что если вы расставите 2 hex символа то получится 16*16=256 комбинаций.

Пропускаем звук с микрофона телефона в компьютер

Изображение
Покопавшись в интернете я нашел много разных туториалов которые показывают методы пропуска звука через mumble сервер и клиент мамбла на телефоне, пропориетарнаый софт WO Mic , и много других. Все эти варианты требуют установки слишком много дополнительных пакетов, либо пропориетарны и написаны непонятно кем. Вдруг в WO Mic есть ратник, как то это все небезопасно. В репозитории варианта с mumble сервер я нашел  https://github.com/MatthiasCoppens/pulseaudio-virtualmic . Этот вариант не требует установки никаких дополнительных или пропориетарных пакетов на ПК. Он может пропускать звук из внешнего источника (например http сервера стримещего mp3). Используя этот скрипт + приложения LANmic  у меня получилось стримить микрофон с телефона на ПК. В настройках звука убунты мне просто потребовалось выбрать как вход этот unix сокет. В остальных вариантах звук всегда доходил с задержкой, но используя этот скрипт задержка минимальна и даже не чувствуется. Хотя если открыть стрим например LANmic нап

How to install trusted certificate from charlesproxy on Chrome Ubuntu 2021

Изображение
When you use charlesproxy and don't configure charlesproxy's CA as trusted ssl you will get this error in chrome: That happens because chrome detect that the SSL certificate is being replaced to some self signed CA. To fix this error you need to export your certificate from charlesproxy, and add it to the chrome's "Authorities" tab. The most important thing is to export the certificate in .CER format, not in .PEM as set by default. Chrome has troubles reading PEM, the only working format is CER. Then go to the chrome's ssl settings page  chrome://settings/certificates and go to the "Authorities" tab: The default chrome's file browser will not show you .cer files, you need to change the file browser's settings to show all files. The .cer file will appear and you need to chose it: Then on the chrome's check "Trust this certificate for identifying websites": After that, the https error page must be gone because chrome now trusts

Python requests ошибка SSL соединения

Изображение
У некоторых сайтов с неправильно настроенным SSL сервером могут возникать проблемы соединеня. В моем случае было странно то что я мог посетить веб сайт через браузер и никаких ошибок не вознкало, но когда я пытался отправить запрос через командную строку curl или скриптом питона то возникала ошибка SSL соединения. Я изучил в чем была проблема, оказалось что в браузерах есть встроенная система востановления недостающих SSL сертификатов. В моем случае была проблема в том что сервер не отдавал промежуточный сертификат. Браузер искал его по своей внутренней базе данных и смог восстановить его. Но у небраузеров такой функции небыло. Вы можете проверить тожесамое посетив сайт https://incomplete-chain.badssl.com . Если вы попробуете послать на него запрос через curl то получите ошибку. Чтобы исправить эту ошибку посылайте запрос с verify=False .

Django генерирование рандомных имён загруженным файлам FileField

В одном из моих проектов мне потребовалось реализовать загрузку пользовательских файлов через форму. Я использовал обычный FileField как советуют во всех туториалах, с стандартной конфигурацией. Пользователи загружали файлы, и все работало хорошо. Но затем я заметил проблему - делов в том что имя файла на сервере совпадало с именем файла которое загрузил пользователь. То есть, например если пользователь загружает картинку 1.png, то его картинка будет доступна по ссылке /uploads/1.png. Проблема этого подхода в том что в таких случаях имя файла можно будет просто перебрать и находить чужие файлы. Например, собрать огромный список стандартных названий файлов, и перебирать их в целях найти чужие файлы. Чтобы исправить эту проблему нужно просто использовать случайные имена файлов. Но дело в том что по умолчанию FileField нигде не сохраняет оригинальное имя файла. Оригинальное имя файла придётся сохранять отдельным полем в моделях. @csrf_exempt @login_required def upload_file (request, s

Как получить тип файла по расширению файла в python

Мне потребовалось угадывать тип файлов по их расширению. Для этого хорошо подошла библиотека mimetypes . На моем сервере находились файлы, например http://google.com/123.mp4. Мне нужно было делать определенные действия с определенными типами файлов. Это можно делать через guess_type: mimetypes . guess_type ( 'http://g.co/123.jpg' ) Полный список поддерживаемых типов находится тут:  https://www.iana.org/assignments/media-types/media-types.xhtml . В моем случае мне потребовалось просто захардкодить if на image/png, image/jpeg, video/mp4. Но такой метод не дает 100% гарантии что тип файла на самом деле будет mp4. Библиотека лишь пытается предугадать тип по расширению файла. Но если файл оканчивается на mp4, никто не давал гарантии что внутри на самом деле не php код например. Если вам нужно 100% знать что файл на самом деле имеет тип то нужно использовать утилиты для файлов. Например для картинок - ImageMagic, для видео - ffmpeg. Они уже проверят так же внутренюю структуру файла п

Как исправить ошибку docker-compose invalid argument for "-t, --tag" flag: invalid reference format

Когда я создавал очередной свой проект, я решил дать ему название на русском. Оказывается докер не дружит с русским языком и у меня вышла ошибка:  invalid argument "_web" for "-t, --tag" flag: invalid reference format . Решением проблемы было просто переименовать название папки на английское.