Задать вопрос
  • Чем Microsoft Exchange лучше бесплатных аналогов?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    В организации так дох.. денег? Лицензия на эксч + лицензия на сервер + лицензии на ящики... Или думаешь, что "война все спишет" и скоро разрешать как раньше "весь microsoft", "весь autodesk" etc?

    Сейчас - эксч крайне неудачный выбор.
    Достоинства? Полная интеграция с MS Office и AD, календарь+контакты+задачи
    Нелдостатки? Крайне хрупкий формат базы почты, требующий ежедневного бэкапа, тупейший imap, работать можно только по mapi, а он платный, кроме MS Outlook нет другого клиента (не считая веб-морды)
    Ответ написан
    2 комментария
  • Как быстро будет работать Windows и программы на сменном носителе?

    @rPman
    ssd + sata переходник на usb3
    это будет на порядок быстрее чем флешка, плюс у windows есть ряд ограничений по запуску с usb флешки, например нельзя разместить своп файл на него (на sata контроллер это может не распространяться но нужно смотреть, сможет ли bios нормально с него грузиться)
    Ответ написан
    Комментировать
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    "Кадр не находится в модуле". Подскажите с чем это может быть связано
    HANDLE h = CreateThread(
        NULL,
        0,
        factorial(gn),
        NULL,
        NULL,
        NULL
    );

    Третий параметр CreateThread -- указатель на функцию, которая будет запущена в создаваемом потоке. А у тебя записано скорее всего что-то другое. Если ты хотел запустить функцию factorial в потоке, она должна 1) иметь определённый прототип (вот такой), и 2) в функцию CreateThread надо передать её адрес, а не результат её вызова (например, так: CreateThread(NULL, 0, factorial, NULL, NULL, NULL)). 3) если ты сделаешь эти два изменения, тебе прийдётся также переделать передачу параметра в функцию factorial и получение результата её работы.
    Ответ написан
  • Можно ли реализовать графику на стандратных и системных библиотеках?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да, конечно. Начиная от wingdi и заканчивая directx - Это все стандартные виндовые библиотеки.
    Ответ написан
    3 комментария
  • Какую книгу по компьютерным сетям почитать студенту?

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

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

    Партицируйте прямо по суткам.

    Убирайте транзакции, нафиг вам тут innodb когда хватит myisam, оно на запись быстрее, у вас база write once read ... тоже once.

    У вас там база данных упирается случайно не в работу с диском? в облаке можно взять несколько дисков, они будут независимыми, раскидай по ним таблицы (myisam штатно поддерживает симлинки), что может дать прирост в скорости в разы только за счет этого, даже если они ssd, например отделить хранение индексов от данных или отделить старые данные от сегодняшних.

    На время обработки аналитики можно потюнить файловую систему и отключить flush для файлов таблиц (например ext4 data writeback и можно отключить журнал) - сильно ускоряет именно запись, особенно если много ram, это включает большой риск потери/порчи данных при сбросе ос но с другой стороны вероятность этого очень мала и как я понимаю, данные в базу и так пишутся из какого то другого хранилища, т.е. при проблеме с сервером просто перезапускается обработка за текущие сутки.

    Уберите индексы на запись, все, сначала пусть идет вставка данных без их индексации, затем создаете индекс (это на порядок быстрее) и уже потом строите аналитику.

    Общая аналитика должна не работать с самими данными, а с их посуточной выжимкой (возможно в результате и хранить их не придется) считай это самодельные индексы. Грубо говоря если в запросе на аналитику стоит count,max,min,.. то достаточно сложить посуточные значения и для глобальных считать уже по ним... само собой если запросы с условиями и сложными группировками, то надо думать но все решаемо.. грубый пример нужно считать агрегацию по часам, вот в индексы и пиши суточные значения по часам, а если надо постранично то для каждой страницы для каждых суток считаешь, потом агрегируешь уже по этим результатам.
    Ответ написан
    6 комментариев
  • Почему транслятор ожидает указатель в моем коде?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Параметр функции int arr[],

    Но далее у вас arr[i][j]. Компилятор пытается взять индекс j, но перед ним же уже число. Вот он вам и говорит "начальника, индекс я у массива (указателя) взять могу, а тут число, непонятно".

    Вы обращаетесь с одномерным массивом, как будто бы он двумерный.
    Ответ написан
    Комментировать
  • Как отсортировать данные структуры по алфавиту?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    У вас заводится переменная str, и как и компилятор вам говорит, вы ее ничем не инициализируете. А ниже используете в strcpy(str, sot[i - 1].familia). Эта функция принимает указатель на область памяти, куда надо скопировать строку. Но указатель указывает на случайное место. Т.е. программа, даже если чудом скомпилируется, упадет с исключением.

    Вам надо или для str выделять память через malloc, или объявить str массивом char фиксированного размера, как поле familia у структуры.
    Ответ написан
    Комментировать
  • Лучшие источники для изучения CPP?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    В самую первую очередь - это будет документация языка. Ее очень удобно использовать как справочник. Это - твой самый первый источник информации по любому вопросу.
    isocpp поддерживается создателем языка и содержит море полезной информации.
    C++ Core Guidelines является манифестом пользователя C++. Его знать обязательно. Документ регулярно дополняется.

    More C++ Idioms. Шаблоны проектирования имеют свою собственную многомерную классификацию. Идиомы - это функциональные шаблоны проектирования, применимые, как правило, или для конкретного языка, или для некоторого семейства языков. Эта открытая книга помогает ориентироваться в некотором начальном наборе идиом конкретно для языка C++.
    C++ Patterns - еще один полезный ресурс для изучения применимых к C++ шаблонов проектирования.
    С Fluent C++ ты уже знаком.
    Безусловно, блог создателей PVS-Studio.
    Habr, конечно же.
    Блогов очень много, их можно просто найти по релевантной фразе "C++ blog".

    Помимо этого есть большое количество каналов от разных конференций, доклады на которых всегда помогают понять язык лучше.
    С++Russia,
    C++Now,
    Pacific C++,
    CppCon,
    code::dive,
    Meeting C++.

    Так же будет полезно изучить книги авторов:
    Андрея Александреску,
    Герба Саттера,
    Девида Вандервуда,
    Скотта Мейерса,
    Роберта Мартина.
    Есть и другие очень полезные авторы. Тут у меня, пожалуй, только самый основной список.

    Последим, и самым важным, источником будет текущая рабочая версия стандарта языка, а так же пара лабораторий для практики: Compiler Explorer и C++ Insights.
    Ответ написан
    Комментировать
  • Теряются/бьются UDP пакеты на localhost, так и должно быть?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Потеря пакетов на localhost может быть, если очень много данных. Просто буфер где-то кончается и все.
    А вот битые данные - это уже 100% где-то у вас в программах ошибки.
    Ответ написан
    Комментировать
  • В чем отличие образов Consumer Edition от образов из Media Creation Tool?

    @MikeDeveloper
    В сборнике Consumer Edition присутствуют редакции Домашняя и Домашняя для одного языка, но отсутствует корпоративная редакция.

    B Business Edition же присутствует корпоративная редакция и отсутствуют домашние.

    Это объясняется тем, что сборник Business Edition ориентирован на корпоративный сегмент и позволяет использовать VL лицензии Microsoft, в то время как Consumer Edition предназначен для частных лиц и позволяет использовать самый низкий уровень лицензии Ноmе.
    Ответ написан
    1 комментарий
  • Что делает команда cls < NUL?

    Vindicar
    @Vindicar
    RTFM!
    Ну вообще < - это перенаправление ввода программы, так же как > - перенаправление стандартного вывода программы. NUL - это устройство (псевдофайл), точнее пустое устройство. Вывод в него не даёт ничего, а ввод эквивалентен чтению пустого файла.
    Вот только зачем это cls...
    Ответ написан
    Комментировать
  • Существует ли тенденция избегать size_t, если это возможно?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Если есть риск присванивания знакового значения в беззнаковое, компилятор выдаст WARNING

    Гораздо опаснее пихать всюду int, особенно в качестве индексов массивов и размеров. Потому что в какой-то момент кто-то захочет посчитать больше 2^31 штук объектов.

    Выдержка из материала по ссылке:
    большое количество диагностических сообщений, выдаваемых анализатором Viva64, связанны именно с рекомендацией использования memsize-типов. Использование memsize типов (таких как size_t, ptrdiff_t, INT_PTR) в 64-битных программах, вместо 32-битных типов (int, unsigned) позволяет:

    Построить компилятору более простой и, следовательно, более быстрый код, в котором будут отсутствовать лишние преобразования 32-битных и 64-битных данных. Особенно это полезно при работе с адресной арифметикой и индексации массивов.
    Избежать ряда ошибок при обработке большого объема входных данных, когда количество обрабатываемых элементов превышает количество UINT_MAX.
    Избежать ряда других, более специфичных ошибок.
    Сделать код более переносимым между 64-битными Windows и Linux системами, в которых используются различные модели данных. Так, например, в Linux системах для индексации больших массивов можно использовать тип unsigned long, а в Windows нет.
    Ответ написан
    7 комментариев
  • Что не так в коде?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    for (int i = 0; i < currentNodeToPrint->childNodes[1]->elements.size();i++)

    Здесь точно должен быть индекс 1, а не t?
    Ответ написан
    Комментировать
  • Как записать файл в определенное место hdd?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Под Windows столь необычный трюк можно выполнить своим кодом, используя FSCTL_MOVE_FILE. Т.е. не создавая файл, а перемещая существующий.

    Либо накидав на диск кучу файлов, а потом с помощью nfi.exe (NTFS File Sector Information Utility), или DiskView, или fsutil querycluster посмотрев что именно лежит в интересующих вас секторах.

    То же самое можно сделать в hex-редакторе, но тут уже требуется некоторое понимание файловых систем.

    Под Linux загляните в исходники dd (в качестве потенциального источника идей) и посмотрите на --write-sector в hdparm.

    Также можно воспользоваться debugfs:
    debugfs:  testb 100500
    Block 100500 marked in use
    debugfs:  icheck 100500
    Block   Inode number
    100500  1488
    debugfs:  ncheck 1488
    Inode   Pathname
    1488    /home/psiklop/hentai.mkv

    Кроме того, в своё время был DiskExplorer, но RunTime, по-моему, очень давно не обновляли свои инструменты, так что не знаю насколько оно работает сейчас.

    нужная прога вылетает

    Если же говорить в целом, то сама по себе такая идея - не очень. У вас уже пошли вылеты, а в будущем диск здоровее не станет, только продолжит покрываться бэдами.
    Так что запись файлов, создание разделов вокруг, лечение (remap) и прочие ухищрения относительно bad block'ов - это пластырь на умирающую лошадь.

    Забэкапьте содержимое всего диска и попробуйте сдать его по гарантии, если она не закончилась. Если закончилась, то используйте как свалку для того, что не жалко потерять.
    Ответ написан
    1 комментарий
  • Внесение данных в std::vector< GLfloat >?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Вектор перед работой с его индексами необходимо привести к требуемому размеру.
    Делается это с помощью метода resize[?].
    После этого можно обращаться к значению по индексу напрямую.

    Если размер вектора уже определен и необходимо именно вставить данные по индексу, то воспользоваться можно методом insert[?].
    Однако, первым параметром метод требует не индекс, а итератор внутри вектора, куда требуется выполнить вставку. Этот итератор можно получить через смещение итератора начала вектора на требуемый индекс.
    vertexBuffer.insert( vertexBuffer.begin() + 1, x );

    При этом важно контролировать чтобы индекс вставки не выходил за пределы размера вектора.
    Забывать не стоит и о том, что при вставке велика вероятность реаллокации памяти под элементы вектора, в следствии чего уже все итераторы и ссылки на элементы вектора будут инвалидированы.
    Ответ написан
    1 комментарий
  • Существует ли тип данных int?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Есть три типа данных - short int, int и long int.
    Компилятор не решает, какого типа будет переменная. Программист должен объявить это явно.
    Компилятор решает, какого размера будет переменная каждого типа.
    Ответ написан
    1 комментарий
  • Почему lambda не захватывает this?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Банальная порча всех итераторов, ссылок и указателей в тот момент, когда вы вызываете emplace у вашей свалки потоков второй раз. Лечение - избавиться от переаллокации при вызове emplace, путем вызова reserve(), или использовать контейнер, который не передвигает свое содержимое туда-сюда, например, std::list
    Ответ написан
    Комментировать
  • Почему постоянно "вылетает" диск из рейд массива на контроллере PERC H710P Mini?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Firmware Version 21.0.2-0001

    Я бы начал отсюда. Эта версия прошивки от мая 2012-го.
    "Стандартный рубеж" в 2 ТБ этот контроллер явно проходит, но всё-таки 10 лет назад и речи не шло о 16 ТБ дисках.
    Попробуйте обновиться до самой последней версии.

    Второй момент уже тоньше. Размер сектора.
    Ваш контроллер точно поддерживает диски с секторами по 512 байт. А вот с 4K - всё-таки вопрос.

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

    ЕМНИП, диски с 512e доходили до 10 ТБ, но это хорошо было бы уточнить по даташитам. Так что если у вас вдруг есть возможность проверить эту идею с помощью других дисков - проверьте (оптимально, если они будут, например, по 12 ТБ).

    Сервис ответил "диск рабочий"

    Вы сами можете проверить диски с помощью Р.тестера: https://rlab.ru/tools/rtester.html
    Можно попробовать в т.ч. и на сервере - если вылезет что-то непотребное, то сопутствующая этому моменту информация может дать пищу для размышлений.
    Размер сектора можно посмотреть там же, как и здоровье остальных дисков, если нужно. Р.тестер, к примеру, умеет показывать SMART для SAS-винчестеров.
    Ответ написан
    1 комментарий
  • Как повысить свои навыки в построении архитектуры сложных приложений?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    1. Хорошо помогает начать изучение с простых паттернов проектирования. Прежде всего это простые и понятные паттерны типа "стратегия", "команда", "итератор", "шаблонный метод", "посредник", "цепочка обязанностей". Изучив и поняв эти паттерны вы посмотрите на ООП по новому: не как просто структурированный код плюс данные в одном объекте, а именно как задумывалось его создателем - объект самостоятельная единица взаимодействующая с другими такими же посредством сообщений. Причём она является first class также как в функциональном программировании функция. К тому же на указанных паттернах строятся и остальные. Например, фабричный метод - это частный случай шаблонного метода. Так постепенно придет понимание куда и зачем применять различные паттерны.
    2. Когда решаете какую-либо задачу, думайте о нескольких вариантах архитектуры для её решения. Далее старайтесь выбирать
    вариант не на основе личных предпочтений или предыдущего опыта (не важно, положительного или отрицательного), а на основе анализа, какой из вариантов здесь реально потребуется с точки зрения дальнейшего развития проекта. Предыдущий опыт также надо учитывать, но все проекты разные, требования разные, и каждая ситуация может отличаться. Надо смотреть как могут изменяться или расшириться системные и функциональные требования (разумеется, для этого надо быть в контексте этих требований - т е знать их самих, манеру работы с проектом заказчика и т д) Во многих случаях, когда вы не сможете выбрать из-за недостатка информации, это логически подведёт вас задавать заказчику дополнительные вопросы. И через этот итеративный процесс приходит понимание, где и как применять паттерны.
    3. Обратите внимание на паттерны ERP систем (для примера книга "Шаблоны корпоративных приложений" Мартин Фаулер) Особенное внимание надо уделить такому шаблону как инверсия зависимостей. Данный шаблон лично мне помог совершенно по другому взглянуть на ООП (во второй раз, уже после того как я стал применять другие паттерны ООП) Вот здесь https://blog.byndyu.ru/2009/12/blog-post.html очень понятно на мой взгляд описано (язык C# но всё тоже самое будет для любого ОО языка) Кроме того в этом блоге много всего по проектированию и рефакторингу.
    4. Обратите внимание на книгу "Growing Object-Oriented Software, Guided by Tests" Стив Фриман Перевод на русский не гуглится, возможно его и нету. Но книга полезна тем, что в отличие от многих других книг по TDD в ней разбирается не только методика тестирования и написания тестов, но и принцип тест -> код -> рефакторинг. И разбирается на достаточно длинном примере. Из неё вы можете подчерпнуть привычку рефакторить, а не переписывать заново. Причём даже если у вас на проекте цикл другой - например тесты пишутся после функционала, всё равно образ мысли изменится и масштабный рефакторинг не будет вызывать непреодолимого желания выбросить и переписать с нуля.
    5. По рефакторингу могу порекомендовать книгу "Работа с унаследованным кодом" Майкл Физерс. Кроме того об этом много статей в уже упомянутом блоге Александра Бындю. Грубо говоря я бы назвал ту подборку статей "как не переписывать и начать жить"
    6. Ещё один блог где собрано большое количество полезных материалов по ООП, рефакторингу, проектированию, это блог Сергея Теплякова Вот ссылка на его подборку книг по теме: sergeyteplyakov.blogspot.com/2013/08/blog-post.html
    7. Изучайте материалы постепенно. Не стоит сразу пытаться воткнуть только что полученные знания в первый попавшийся проект. Обсуждайте возможные решения с коллегами. Со временем они также станут поддерживать эту практику. Если есть возможность, попрактикуйте парное программирование. Причём не обязательно с более опытным коллегой. Иногда вопросы задаваемые наивным человеком заставляют задуматься гораздо крепче, чем ответы получаемые от мудрецов.
    Ответ написан
    1 комментарий