Задать вопрос
  • Как настроить двухфакторную авторизацию VPN (mpd5)?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Сам по себе mpd5 не умеет ничего такого. Но для авторизации он умеет обращаться к RADIUS серверу. А через RADIUS (к примеру freeradius) можно настроить все что хочешь. Можно, к примеру, гугловый totp. Но с СМС, как на большинстве сайтов, вероятно, не получится. Там нет возможности что-то дозапросить у юзера, если только при первой авторизации отправить СМС и юзера не пустить, а потом ждать следующую авторизацию и в качестве пароля пароль из СМС.
    Ответ написан
    Комментировать
  • Безопасно ли использовать секретный поддомен для dev версии проекта?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Как минимум провайдер сможет.
    Если у тебя подгружаются скрипты/css/картинки с внешних ресурсов - админы этих ресурсов могут увидеть адрес твоего сервера.
    А действительно ли это так страшно, что твой dev сайт кто-то найдет?
    Ответ написан
    1 комментарий
  • Как создать асинхронную задачу и в чем ее отличие от потока?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    1. примерно так

    2. Нет, многопоточность с асинхронностью не имеет ничего общего. При многопоточности обычно планировщик ядра (если потоки ядерные) переключает контекст между твоими потоками. Работает это так: ты в своем приложении сообщаешь планировщику что хочешь создать поток (например через pthread_create, если ты программируешь в linux или freebsd), указывая ему функцию, которая должна выполняться в отдельном потоке и аргументы для нее. Ядро создает у себя в таблицах запись для него и ставит этот поток в очередь на выполнение так же как основной поток. Адресное пространство у них будет общее.

    3. К примеру ты хочешь обслуживать TCP клиентов, ты создаешь сокет (или несколько), ставишь им неблокирующий режим, затем тебе их в цикле нужно опрашивать. Для этого есть несколько способов: select и poll есть во всех ОС, но они хороши когда у тебя сокетов мало. В linux есть еще epoll, который намного более эффективен, во FreeBSD и MacOS есть kqueue - очень эффективный метод. Когда к тебе, к примеру, придет TCP клиент твой select/poll/epoll/kqueue вернет информацию о сокете, который готов для чтения (твой listen сокет), ты делаешь ему accept, и добавляешь сокет клиента в select/poll/epoll/kqueue. Если происходит событие на клиентском сокете, к примеру на нем сработал read - значит там есть данные, ты их читаешь и обрабатываешь, если сработал write - сокет освободился для записи и можно в него писать. Еще в kqueue и epoll есть таймеры. Главное не использовать при такой архитектуре какие-нибудь sleep, не использовать блокирующие библиотеки с базам данных, нужно обраратывать все быстро и возращать управление в select/poll/epoll/kqueue. Если, к примеру, нужно сделать задержку, выполнение коллбэка нужно прервать, создав какой-нибудь таймер (есть много способов).
    В целом - разработка асинхронных приложений требует совершенно иного подхода, это обычно немного сложнее, особенно если тебе нужно будет ходить, например, в базу данных. К примеру, системный резолвер (gethostbyname) является блокирующим - его в такое архитектуре исползовать нельзя, придется взять библиотеку, например, c-ares, которая реализует асинхронный резолвер.

    4. то же что и 3, но select/poll/epoll/kqueue запускаем в нескольких потоках, это рационально делать для утилизации нескольких процессоров.
    Ответ написан
    Комментировать
  • Есть ли способ спросить у PostgreSQL, с какими запросами у него возникают наибольшие сложности?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Можно ничего не ставя посмотреть какие запросы выполняются сейчас
    select * from pg_stat_activity;
    Выполнив запрос несколько раз можно понять какие запросы висят долго
    Ответ написан
    1 комментарий
  • Что такое Байт Бит и как это работает не много о звуке?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Про изображение все примерно так. Про звук все не совсем так.
    Как уже сказали выше, у цифрового звука в формате ИКМ (PCM) есть 2 основные характеристики: разрядность и частота дискретизации.
    Разрядность встречается до 32 бит (бит а не байт!!! до 32 бит это до 4х байт). Например в CD - 16 бит (2 байта) на каждый сэмпл, в телефонии 8 бит (1 байт) на сэмпл, современную музыку кодируют в 24 бита а иногда и в 32. Чем выше разрядность тем больше градаций амплитуды может быть воспроизведено (амплитуда воспроизводится с большей точностью). Например в телефонии 8 бит (256 значений) а на CD 16 бит (65536 значений).

    Частота дискретизации это сколько таких сэмплов в секунду захватывается (хранится/воспроизводится).
    Чем выше частота дискретизации тем лучше сохраняются высокие частоты. Как известно максимальная частота, которая может быть передана равна половине частоты дискретизации. Для CD это 44100Гц (т.е. максимальная частота звука на на аудио диске может быть около 22кгц а в телефоне частота дискретизации всего 8000Гц и например, звучание скрипки, он передаст очень плохо, поскольку частоты выше 4кгц будут отрезаны).

    Как вывести данные в консоль зависит от того, в каком контейнере эти данные лежат (формат файла). Кроме того, следует еще учесть, что 16/24/32 битные числа (а звуковые сэмплы это в любом случае числа) могут быть знаковые (положительные и отрицательные) или беззнаковые (только положительные), целые или дробные (с плавающей точкой, обычно это 32 битный звук такой) а так же какой порядок байт используется (так называемый endianness, например число 65536 в файле может храниться как 01 00 00 а может как 00 00 01).
    Т.е. одни и те же байты в файле могут быть интерпретированы по разному в зависимости от этих параметров.

    Если тебе надо читать данные из файла и отображать их - читай документацию по нужному тебе формату.
    Отобразить в виде осциллограммы - дело не хитрое, берешь столько сэмплов из файла, сколько точек ты хочешь нарисовать по горизонтали и каждый сэмпл (число) будет обозначать отклонение по оси Y (ноль будет внизу или по середине в зависимости от "знаковости" формата). Учти, что файл может быть стерео, тогда сэмплы двух каналов будут чередоваться.
    Однако для анализа звука осциллограммы редко используюся, гораздо нагляднее анализировать его спектр (для этого нужно сделать преобразование Фурье, гуглить по слову FFT).
    Ответ написан
    Комментировать
  • Как зашифровать интернет канал?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Ну в зависимости от ОС сервера и ОС клиентов есть ряд вариантов.
    Самый простой это PPTP , в Windows он встроен.
    Есть более интересные варианты, но настройка их более сложная, такие как IPsec, L2TP over IPsec, OpenVPN, Tinc.
    Если напишешь подробнее про ОС сервера и клиентов, про необходимый уровень безопасности, то, возможно, что-то смогу подсказать более подробно.
    Ответ написан
    Комментировать
  • Как научить девочку программировать?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Не думаю что это будет легко, думаю ребенок сам должен захотеть. Я сам начал изучать программирование, когда мне было около 5 лет (бейсик на ZX Spectrum). Увидел в детском саду, как воспитательница на печатной машинке что-то набирала. Домой пришел, попросил папу включить мне компьютер "чтобы можно было набирать". Папа посмотрел на этот "процесс" минут 10, и говорит: "Не занимайся ерундой, давай я тебе покажу как программировать". Папа у меня, кстати, совсем не программист, он умеет программировать на бейсике на уровне 7 класса школы. Но мне это так понравилось, меня так затянуло.... И вот уже больше 20 лет я программирую.
    Пытался обучить программировать сына несколько раз (ему сейчас 8) и дочь (ей 5 лет). Особых успехов не достиг, но, похоже что через программирование железа (например робота) - это более перспективный способ: светодиодами помигать ему оказалось интереснее, чем писать hello worldы. К сожалению далеко это не зашло - сын занялся музыкой.
    Ответ написан
    Комментировать
  • Как синхронизовать почтовые ящики по imap или pop3?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Я, обычно, в Thunderbird добавляю новый аккаунт и переношу почту им.
    Ответ написан
    Комментировать
  • Как узнать какие домены есть на одном ip?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    В общем случае это НЕВОЗМОЖНО.
    Некоторые сервисы делают якобы такое, но они делают наоборот: они ищут домены и резолвят его IP адрес, складывают в базу. А потом по IP находят какие имена они "находили" на этом адресе.
    И, конечно, они не могут гарантированно найти ВСЕ виртуальные сервера.
    Ответ написан
    Комментировать
  • Как перевести юникод средствами js?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Тут у тебя не юникод, кодировка cp-1251, просто закодирован в urlencode. Для раскодирования воспользуйтя функцией unescape(), например unescape("%C8%EC%FF")
    Ответ написан
  • Копировать в базу ли данные пользователя, вошедшего по OAuth (Facebook)?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Ну сохранять их будет полезно, если у Вас есть, например, форум. А при каждом входе, по хорошему, их нужно синхронизировать. Если Вам имя пользователя и другая его инфа в его отсутствие не нужна, то можно после входа данные хранить в сессии.
    Ответ написан
    6 комментариев
  • Поддерживает ли App Store VISA Electron?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Все зависит только от банка выпустившего Вашу карту, авторизует-ли он online транзакцию или нет.
    Ответ написан
    Комментировать
  • Как получить данные со считывателя карт на web-сервер?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Я такую задачу решал написанием приложения на QT, в нем все окно занимает WebView. Т.е. получается такой браузер. Кроме WebView, приложение открывает COM порт (виртуальный, ридер подклбчен через USB), и ожидает оттуда данные. При получении пакета с кардридера, он взывает javascript функцию, передавая ей в качестве аргумента данные с карты. Как обрабатывать данные дальше - ограничено только Вашей фантазией. На разработку такого приложения у меня ушло 3 или 3.5 часа. Приложение разрабатывал под Mac OS, дальше его "просто скомпилировал" под Windows. Так-же оно должно "просто скомпилироваться" под Linux, FreeBSD и другие поддерживаемые QT ОС.
    Ответ написан
    Комментировать
  • Почему маленькая скорость передачи в wifi сети?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Во первых нужно найти наименее зашумленный канал. Вероятно у соседей стоит много точек доступа, и они мешают твоей точке (а твоя мешает им). Тебе необходимо просканировать эфир и найти наименее загруженный канал.
    В Mac OS это можно сделать утилитой Wireless Diagnostics, которая лежит в /System/Library/CoreServices/Applications.
    В Windows для этих целей можно попробовать утилиту www.wifichannelscanner.com (сам не пробовал, виндовсом не пользуюсь).
    В линуксе это, на сколько я помню, делается утилитой iwconfig.

    Хочу заметить, что, несмотря на то, что в 802.11 каналов 11 или 13, непересекающихся всего 3.

    1080px-2.4_GHz_Wi-Fi_channels_%28802.11b

    Во вторых нужно посмотреть в каком режиме у тебя работает точка доступа. Для максимальной скорости необходимо поставить режим Native 802.11n или 802.11n only (каждый вендор называет как хочет, но смысл примерно такой). Но в этом случае устройства, не поддерживающие 802.11n (например 802.11g адаптеры) подключиться не смогут.

    В любом случае, даже при идеальных условиях скорость передачи полезных данных через WiFi у тебя будет не более 60-70 МБит (7-8 МБайт/сек) с твоей точкой доступа (у нее канальная скорость 150Мбит/с).
    Ответ написан
  • Igmpproxy + VPN PPTP почему не идет мультикаст в VPN?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Тут кроме IGMP proxy тебе еще потребуется "что-то" что будет мультикаст роутить.
    Действительно-ли тебе нужен мультикаст через PPTP? Может проще его в юникаст конвертировать? Есть такая штука, называется udpxy. Сам лично не ставил, но знаю что в моей сети несколько абонентов забирают у меня IPTV через нее и смотрят в другом месте (в том числе и через PPTP). Cмысл такой: udpxy забирает поток по UDP (в том числе умеет Joinится к multicast группам), а отдает через HTTP, который уже подчиняется правилам маршрутизации Unicast :)
    Ответ написан
  • Раздача WiFi и тунель ssh, как подружить?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Поумолчанию ssh -D port биндится только на 127.0.0.1 и ::1.
    Можно попробовать сделать вот так
    ssh -D 192.168.x.y:9900 name@server.com
    вместо 192.168.x.y вписываем IP адрес Linux машины, который доступен с Windows машины (по сути адрес Linuxа на WiFi интерфейсе).
    после этого на машине с Windows в браузере указываем в качестве SOCKS прокси это адрес.
    На машине с линуксом тоже надо будет поменять адрес прокси.
    Кроме того можно попробовать сделать ssh -D \*:9900 name@server.com, в этом случае он будет биндиться на все адреса, в этом случае прокси на 127.0.0.1 продолжит функционировать.
    Ответ написан
    Комментировать