• Выбор решения для вебсервера C++?

    nekipelov
    @nekipelov
    Когда-то для себя делал: https://github.com/nekipelov/hserv/blob/master/exa...

    Но все же рекомендую статику отдавать с помощью nginx/lighttpd, а C++ приложение должно реализовывать только бизнес логику.
    Ответ написан
    Комментировать
  • Почему D не популярен?

    nekipelov
    @nekipelov
    1. Он поздно появился и не предлагает ничего достаточно интересного относительно существующих ЯП.
    2. Он не стандартизирован, поэтому серьезный проект завязывать на нем опасно.
    3. Еще относительно недавно у D было две стандартных библиотеки: Phobos и Tango.
    Ответ написан
  • Стоит ли поднимать почтовый сервер? или воспользоваться Gmail?

    nekipelov
    @nekipelov
    1) Знаю, что для почтового серва нужен белый статический адресс. Вопрос: обязательно ли прямое подключение кабеля провайдера в сетевую карту компа с почтовым сервером? или можно пробросить порт на роутере?


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

    2) Есть комп с dns сервером, нужно ли домен регистрировать?


    Наверное тебе нужен какой-то текстовый адрес, вида имя@фамилия.ru. А адрес - это домен с указанием mx записей. Так что да, нужен.

    3) Нужно прописывать обратную зону у провайдера и spf тоже?


    Нужно и то и другое, в противном случае письма могут пойти быть восприняты как спам. По крайней мере так было, когда я поднимал свой почтовый сервер (лет 6 назад).

    4) Где должна быть прописана запись mx и A?


    В dns сервере, который отвечает за твой домен.

    В общем, самый простой вариант: использовать почту для домена.
    Ответ написан
    1 комментарий
  • Возможно ли програмирование Веб-приложений на языках С, С++?

    nekipelov
    @nekipelov
    Обычно на C/C++ пишут сервисы/backend высоконагруженных сайтов. Сервисы достаточно часто могут работать по протоколу http. Примеры: сервисы yandex.ru, mail.ru, sputnik.ru.

    Я для себя делал: https://github.com/nekipelov/hserv
    Ответ написан
    Комментировать
  • Как реализовать конвертацию строки unicode в utf-8 C++?

    nekipelov
    @nekipelov
    Можно взять utfcpp, использовать просто:

    std::wstring ws;
                utf8::utf8to16( str.begin(), str.end(), std::back_inserter(ws) );
    
                std::string str;
                utf8::utf16to8( ws.begin(), ws.end(), std::back_inserter(str) );


    Или сразу icu, где есть все для работы с многобайтовыми кодировками.

    Ну или средства WinAPI: MultiByteToWideChar
    Ответ написан
  • Как исправить функцию, распределяющую столбцы матрицы в массив для сортировки?

    nekipelov
    @nekipelov
    Советую давать переменным более значимые имена. Имена вроде A, B, m, k, i, j и используют в тех случаях, когда специально хотят воспрепятствовать попыткам прочитать программу.

    Также советую не использовать голые указатели. Их использование и приводит к таким вот проблемам. Чем вас не устроил std::vector?

    Пару ошибок вижу:

    for(int i=0;i<A;i++)
    {
        temp[i]=Arr[i][j];
    }


    for(int i=0;i<A;i++)
    {
        Arr[i][j]=temp[i];
    }


    Переменная temp - это массив размером B, поэтому если A больше, происходит выход за пределы.
    Ответ написан
    2 комментария
  • Как решить проблему с потоковыми итераторами c++?

    nekipelov
    @nekipelov
    В этой каше сложно разобраться, но причина очевидна: отсутвие const

    Student& operator=(Student& b) - должно быть Student& operator=(const Student& b)
    Student(Student& a) - должно быть Student(const Student& a)
    ostream& operator<<(ostream& s,Student& a) - должно быть ostream& operator<<(ostream& s,const Student& a)

    и т.д.
    Ответ написан
    Комментировать
  • Как определить, какой процесс грузит vds?

    nekipelov
    @nekipelov
    top все прекрасно отображает (в колонке %CPU процент использования, в колонке COMMAND имя процесса), можно использовать более удобный htop.

    Можно в cron запускать программы через time, тогда после выполнения на емейл придет отчет вот такого вида:

    real 1m1.694s
    user 0m3.360s
    sys 0m5.516s

    из которого понятно, сколько процессорного времени затратила программа и в каком режиме.

    Можно запускать с помощью cron каждую минуту команду
    ps h -eo pcpu,comm | sort -n  | tail -n1 >>/home/user/cpu-usage-stat
    и после поступления очередной жалобы смотреть, какой же процесс встречается чаще всего. Если бы передо мной встала такая задачка, я бы таким же образом выводил штук 5 самых жадных до CPU процессов, сохранял в БД, а потом посмотрел.
    Ответ написан
    3 комментария
  • Игра на C++: какую использовать библиотеку?

    nekipelov
    @nekipelov
    SFML - это всего-лишь аналог SDL, вам нужен игровой движок. Сейчас чаще всего на слуху Unity, а вот тут имеется более подробный списочек.
    Ответ написан
  • Какой может быть максимальный размер двусвязного списка в С?

    nekipelov
    @nekipelov
    Он зависит от количества доступной процессу оперативной памяти и от реализации этого списка.
    Ответ написан
    Комментировать
  • Компьютерная неточность JS

    nekipelov
    @nekipelov
    Используйте целые числа. 1 рубль и 10 копеек представляются в виде 110 или 1100 в зависимости от требуемой точности.
    Ответ написан
    Комментировать
  • Что читать, чтобы получить знания по серверному программированию C/C++?

    nekipelov
    @nekipelov
    Классика жанра: UNIX Network Programming Ричарда Стивенса. Там очень много полезной информации. Даже если сервер будет работать под Windows, большая часть этой и=информации будет актуальной. Ну а уже после прочтения интересуйтесь такими вещами, как epoll и kqueue.
    Ответ написан
    4 комментария
  • Может ли байт состоять из не восьми битов?

    nekipelov
    @nekipelov
    Заглянул в википедию, определенного ответа для себя не нашел.


    Странно, я вот вижу: en.wikipedia.org/wiki/Byte#History

    Существуют на сегодняшний день архитектуры или реализации не равным 8 бит в байте?


    Существуют. Но скорее всего все они стоят в музеях. Хотя в RFC, как правило, до сих пор пишется octet вместо byte (en.wikipedia.org/wiki/Octet_(computing)).

    Есть ли статьи на эту тему, чтобы больше разобраться?


    А смысл тратить время? Это мертвые архитектуры. Сейчас на практике встретить такое маловероятно.
    Ответ написан
    Комментировать
  • Каким образом осуществляется взаимодействие веб-сервера (сайта) и клиента?

    nekipelov
    @nekipelov
    1) Что вообще обозначает синхронность/асинхронность в веб-технологиях?


    То и означает, что работает синхронного или асинхронно. Более расширенный ответ зависит от контекста (вы имели в виду реализацию http сервера, или же реализацию интерфейса, а может быть другое).

    2) Клиент открывает в своем броузере сайт. Что происходит? Создается TCP/IP соединение?


    Например открывает сайт www.ru/dir/page.html:

    1. Браузер должен определить ip адрес соответствующий домену www.ru,
    2. Установить соединение с ip адресом на порт по умолчанию 80.
    3. Сформировать и отправить HTTP запрос (GET /dir/page.html).
    4. Получить ответ и обработать его.

    Если запрос инициирован из JavaScript, ответ передается ему. Если же сам браузер, открывается страничка, если тип ответа html, картинка, если тип ответа картинка, или выполняется javascript код....

    Каким образом сервер знает куда отправить пакет в случае, когда появился новый контент (AJAX)? Он сохраняет информацию (не закрывает?) TCP/IP соединение и использует этот транспорт для общения с клиентом?


    В классическом http сервер сам по себе ничего не отправляет клиенту, только отвечает на запрос с его стороны. Клиент сам время от времени опрашивает сервер на предмет появления новых данных. Зарывается ли соединение или нет зависит от используемого протокола (HTTP 1.1 по умолчанию поддержэивает соединение) и настроек сервера/клиента (есть таймауты, по истечении которых соединение закрывается).

    Есть новомодные технологии, например WebSockets. Все шаги почти такие же, как и для HTTP, но в рамках одного tcp соединения мультиплексируюстя несколько виртуальных соединений. В этом случае WebSockets-сервер может сам инициировать отправку данных клиенут (как и клиент серверу в рамках этого же tcp соединения). Только сервер ничего не узнает, его дело - пересылать байты. Инициирует отправку web приложение, выполняемое на стороне сервера.

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

    3) Сохраняется ли это соединение активным пока клиент не закроет вкладку с этим сайтом в своем броузере? А если клиент открыл вкладку с сайтом и на N часов ушел пить чай, то в этом случае все эти N часов сервер должен обслуживать это соединение? Насколько это требовательно к рессурсам? Если клиент открыл N вкладок с N сайтами в своем броузере, означае ли это что открыто N TCP/IP соединений? Какие есть ограничения на количество таких соединений для клиента и для сервера?


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

    4) На каких технологиях реализуют чаты?


    Лучше всего подходят WebSockets и бесконечные фреймы. При этом WebSockets могут быть использованы как в родной реализации для браузера, так и с помощью flash плагина, в случае отсутсвия родной поддержи. Хотя никто не мешает сделать это с помощью опроса (long polling).

    Наверное проще всего использовать что-то вроде socket.io, а уж оно само выяснит и решит, каким образом можно взаимодействовать с сервером.

    PS: Конечно же это далеко не полная информация, уж слишком серьезная тема затронута.
    Ответ написан
    3 комментария
  • Какие перспективные технологии/направления для С++ программиста есть сейчас?

    nekipelov
    @nekipelov
    C++ был и остается универсальным языком. Какие направления в ПО перспективны? Почти везде применяется C++. Ну за исключением front-end web приложений, хотя может быть и там начнут применять благодаря Native Client/Portable Native Client.

    А изучать стоит все, но начинать с того, что больше нравится. Сетевое программирование, разработка GUI, низкоуровневое программирование, системное, разработка игр, обработка изображений, хранение или поиск данных...
    Ответ написан
    Комментировать
  • Как записать данные из файла в массив структур?

    nekipelov
    @nekipelov
    Если бы string1 был представлен как char string1[123], то структура struct_name являлась POD типом. В этом случае можно было бы читать так:

    vector<struct_name> vector_name;
    FILE *fp = fopen(...);
    size_t size = ...
    
    vector_name.resize(size);
    fread(&vector_name[0], sizeof(struct_name), size, fp);


    Но т.к. struct_name не является POD, придется реализовывать чтение поэлементно. Или же воспользоваться чем-нибудь вроде boost.serialization:

    struct struct_name {
        int int1;
        string string1;
        int int2;
    
        template<class Archive>
        void save(Archive & ar) const
        {
            ar  & int1;
            ar  & string1;
            ar  & int2;
        }
        template<class Archive>
        void load(Archive & ar)
        {
            ar & int1;
            ar & string1;
            ar & int2;
        }
    };
    Ответ написан
  • FTP сравнение файлов на сервере с локальными файлами и докачка новых файлов

    nekipelov
    @nekipelov
    Если есть shell доступ на сервер, то зайти и выполнить sha1sum, получившиеся контрольные суммы сравнить с локальными, в результате список изменений.

    Если shell доступа нет, можно попробовать ориентироваться на дату изменения файла. Или друг имея актуальную версию может получить список контрольных сумм у себя.
    Ответ написан
    Комментировать
  • Почему не стоит использовать идентификатор сущности как первичный ключ в базе?

    nekipelov
    @nekipelov
    Primary key должно быть то поле, которое явлется идентификатором, используемым для выборки. Зачем делать в качестве primary key целочисленный идентификатор, если строка идентифицируется и запрашивается по domain id? Только лишний идекс. Если же можно делать выбору по целому числу, то конечно же его следует добавить и использовать вместо domain id.
    Ответ написан
    Комментировать