Пенсионный возраст в IT
Часто слышу что 33-36 это возраст пенсионера в IT
Что можно делать такое в 25, чего уже нельзя делать в 35?
Есть ли разница, например, у сиплюсников и верстальщиков CSS?
Хотелось бы услашать ваше мнение
Часто слышу что 33-36 это возраст пенсионера в IT
Что можно делать такое в 25, чего уже нельзя делать в 35?
Есть ли разница, например, у сиплюсников и верстальщиков CSS?
Хотелось бы услашать ваше мнение
Под винду есть куча всяких протекторов и прочего что может оттянуть момент написания кряка. Есть ли действительно годные линуксовые решения?
интерес академический
Пользователь приходит по https на апач, нужно получить параметры передаваемые в пакете «Client Hello».
Получить версию протокола получилось, код добавила в месте где уже понятно что пакет клиент_хэллоу получен (https://github.com/apache/httpd/blob/7d4c0f0eceab1dbd3fd1237e9f0b3fe9c8914861...)
char ssl_protocol_version_code_str[16];
sprintf(ssl_protocol_version_code_str, "%d", SSL_version(ssl));
//Добавляем переменную в php $_SERVER
apr_table_set(env, "EXTENTED_SSL_PROTOCOL_VERSION_CODE", ssl_protocol_version_code_str);
Клиенты приходят на апач по https. В php-модуле нужно получить, да хоть в бинарном виде, пакет «Client Hello», либо как-то получить поддерживаемые клиентом криптографические наборы, расширения и методы компрессии.
Как такое устроить?
Унаследовалась от класса в котором есть публичные методы CClassname::read и CClassname::write. Есть какой-нибудь способ обратиться к библиотечным read и write? Очень не хочется лезть в чужой код
Добрый день
Делаю сплайс из неблокируемого сокета в пайп.
Псевдокод:
if(pipe(splice_pipe) < 0)
{
perror("pipe");
return -1;
}
pipe_size = fcntl(splice_pipe[0], F_GETPIPE_SZ))
...................
//При событии поступления данных на сокет
if((read = splice(
sock_fd,
NULL,
splice_pipe[1],
NULL,
pipe_size - pipe_bytes_num,
SPLICE_F_MOVE|SPLICE_F_NONBLOCK
)) <0)
{
perror("splice");
return -1;
}
pipe_bytes_num += read;
Код не могу привести полностью из-за размазанности по проекту.
Откуда берется EAGAIN, если допустить что в коде нет попыток переполнения пайпа и в буфере сокета есть данные?
Из одного потока в другой нужно организовать очередь. Один писатель и один читатель. Рассматриваю варианты <queue>+spinlock или ядерную очередь.
Спинлок вроде быстр, но будет топить проц ждущим потоком
Ядерная очередь это передача данных через само ядро, но событие на очереди можно отлавливать с пом того же epoll, что очень удобно
Что думаете?
Пишу тз для клиент-серверного приложения и есть дилемма при выборе модели управления соединениями.
Между приложением и сервером должны передаваться данные и команды. Данные представляют собой бинарный поток неизвестной длины и не имеют признака окончания и проще всего завершать соединение как признак конца передаваемых данных.
Команды представляют собой структурированные данные известной длины. после их передачи соединение завершать не нужно.
Для приложения критичен онлайн клиента.
Варианты:
1) Приложение создает соединение с сервером, данные передаются, соединение закрывается. Как только данные начинают передаваться, создается пулл таких соединений для того чтобы избежать задержек на создание нового соединения когда оно понадобится.
Минусы:
a) может так случиться что первое соединение закрыто, а новые соединения еще не созданы (еще только создаются).
Сервер видит что нет ниодного соединения и читает что клиент в оффе и на сервере придется пилить костыли чтобы обработать это.
Даже если создавать больше 1 соединения первоначально, то неисключено что эти соединения будут завершены прежде чем
будет создано хотябы 1 новое.
b) Данные и команды придется передавать по одним и тем же соединениям. Нужно устанавливать какие-то приоритеты(???)
2) Разделяем соединения на типы: 1 командное которое будет ВСЕГДА онлайн пока приложение онлайн и остальные соединения только для передачи данных. Политика работы с соединениями для передачи данных такая же как и в 1) По командному соединению, соответственно, передаем команды.
Минусы: создаем дополнительное соединение которое будет занимать ресурсы сервера
-------------------------------------------------------------
Есть экзотические варианты, но там совсем уж...
Какую модель используют на практике?
Какие подводные камни?
Хотелось бы критики
Данные передаваемые между клиентом и сервером представляют собой некоторую коммерческую ценность, но никак не шифруются. Кроме того, клиент никак не идентифицирует сервер и это дает простор для разнообразных атак (типа синкхола и снифа).
Нужно выбрать (или разработать???) методы идентификации сервера клиентом и шифрования передаваемых данных по сети.
С чего правильно начать выбор методов?
Какие подводные камни?
Страуструп в своей книге «С++ принципы и практика» откровенно не рекомендует использовать макроопределения из-за возможных сложностей в отладке и пр, но много лет практики на С берут свое и очень хочется сделать что-то типа
#ifndef DEBUG
#define DEBUG
printf(...);
#endif
При отладке epoll_wait возвращает -1 независимо от того есть событи на сокетах или нет. Нагуглила костыль
do {
events_num = epoll_wait(epoll_fd, events, num, -1);
} while(events_num < 0 && errno == EINTR);
Сетевой сервер при каждой операции чтения/записи в сокет делает метку времени и регулярно проходится по массиву соединений в поисках тех которые нужно отвалить по таймауту.
Каждый раз приходится получать время вызывая time() и это натолкнуло на мысль что 2 сискола за раз это как-то накладно.
Возникла идея запустить отдельный поток в котором несколько раз в секунду будет получаться время и писаться в переменную. Переменную закрыть мьютексами, а из рабочего потока считывать значение по необходимости.
Вопрос следующий: а не перекроют ли все полученные выгоды расходы на работу с мьютексами?
Может ли send при записи 2-х байт в заведомо пустой буфер отправки неблокируемого сокета записать 1 байт?
Все в штатном режме и без ошибок.
Для отладки сервера нужна мизерная скорость передачи данных в 1 байт в секунду на локальном интерфейсе.
Посмотрела маны по tc и ужаснулась тому что плаваю в вопросе) Если кто может, дайте строчку команды.
Спасибо
Хотелось бы протестировать серверный софт. Для тестов написан клиент, но тестировать на loopback как-то несерьезно. Нужны обрывы, ошибки передачи данных, рандомные таймауты, фрагментация данных при отправке и получении и прочее.
Создавать такие условия как-то накладно и хотелось бы эмулировать такую «реальность».
Это возможно?
Очень нужна критика, ощущение велосипедостроения
***Далее, сокеты неблокируемые, мультиплексируем с пом epoll (тут непринципиально)
В процессе обмена данными между клиентом и сервером размеры пакетов данных заранее неизвестны (указываются в самих пакетах), пакеты приходится разберать «налету», дочитывать из сокета требуемое колво-данных и возвращаться к прежнему состоянию протокола.
Алгоритм протокола я разбила на этапы каждый из которых завершается тем что нужно вычитать/отправить еще данных из сокета и возврат к ожиданию события EPOLLIN/EPOLLOUT.
Схематично:
//Сам протокол
protocol_stage_t protocol(protocol_stage_t stage)
{
if(stage_1)
{
//Какой-то алгоритм
...
//Если нужно получить/отправить данные, запоминаем состояние протокола и выходим
}
if(stage_2)
{
//Какой-то алгоритм
...
//Если нужно получить/отправить данные, запоминаем состояние протокола и выходим
}
....
}
//Ожидаем события
void event_loop()
{
//Если пришли данные
if(EPOLLIN)
{
...
//Восстанавливаем состоние протокола для клиента и продолжаем выполнение
...
last_stage = protocol(saved_protocol_state);
//Запоминаем где-то состояние протокола на котор остановились
...
}
//Если ушли данные
if(EPOLLOUT)
{
...
//Восстанавливаем состоние протокола для клиента и продолжаем выполнение
...
last_stage = protocol(saved_protocol_state);
//Запоминаем где-то состояние протокола на котор остановились
...
}
}
Есть маломощный нетбук, попробовала Debian 8 XFCE
Слышала что команда XFCE малочисленна и они затягивают с обновами, в том числе и с критическими
Я не большая специалистка в области всякоразных дистрибутивов и репозиториев, поэтому возникает вопрос:
Если я использую Debian+XFCE и выпущено какое-то обновление для ядра, то это обновление выпускается для всех сред рабочего стола Debian независимо от среды рабочего стола?
Спасибо
Добрый день
Есть пачка запущенных процессов парметры которых нужно получить.
Все осложняется тем что в параметрах могут быть строки содержащие пробельные символы, поэтому читать /proc/$PID/cmdline неверно.
К примеру, если строка запуска следующая:
./script.sh --any-string-param ' any string value for --any-string-param '
Добрый вечер
Приходит строчка в ASN.1 PER, надо ее десериализовать/распарсить/распаковать...
Известны типы данных которые могут быть упакованы
Языки С/С++/Java
Гугл говорил о компиляторах, чудовищних стандартах...
Что посоветуете?
Добрый вечер
Есть исходники класса на Java со всякими страшными вычислениями и подобной бинарщиной.
И есть скрипт на PHP из которого ну очень нужно вызывать методы класса на Java.
Разбираться в исходниках класса на Java и переписывать совсем антивариант, код класса писался «для машины, а не человека».
Как вызвать одно из другого?
Спасибо
следующие → |