• Можно ли восстановить удаленный файл из папки?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Вопрос: это случайно не WebPack-проект? Есть ли эта папка в .gitignore`?

    Если файл был под контролем GIT, то можно посмотреть, что изменилось с последнего состояния вот так:
    git status

    Там будет выведен список изменённых и удалённых файлов, которые были под контролем.

    Если файл там появился, то надо ввести команду:
    git checkout <путь к файлу>
    чтобы откатить его состояние к последнему (в том числе и восстановить после удаления).

    А если же это WebPack-проект, а папка dist числится в списке .gitignore, то тогда лучше собрать сам проект снова, чтобы заново создать тот файл.

    А если это вообще левый файл, созданный лапками и он был не под контролем git (находится в исключённой через .gitignore папке), то тут git не поможет, нужно восстанавливать удалённый файл через файловую систему (если он ещё не успел испортиться).
    Ответ написан
    Комментировать
  • Как перенсти папки из Mail в аутлук?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Как ответил Sand в комментариях, нужно подключить почту по IMAP. Дальше, просто переносить письма в локальные папки и сортировать по своему усмотрению. Также через IMAP можно переносить письма с одного почтового ящика на другой (для этого надо оба почтовых ящика подключить по IMAP одновременно). Я сам через IMAP переносил почту между разными почтовыми ящиками, но в основном предпочитаю хранить почту автономно, забирая её через POP3, а IMAP использую параллельно для того, чтобы копаться на сервере непосредственно.
    Ответ написан
    Комментировать
  • Какую легковесную IDE выбрать для C++?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Я сам для себя использую Qt Creator. По мне очень удобная и шустрая среда. Однако, хочу предупредить: в последних версиях присутствует модуль clangd (модель кода CLang): штука очень полезная, позволяющая находить различные косяки на лету без необходимости собирать проект, однако, она жрёт оперативку очень знатно. Поэтому, если машина слабая, то лучше отключить эту штуку. Мне лично среда ОЧЕНЬ нравится не только за её легковесность, но и за встроенный функционал по рефактрорингу (умному переименованию элементов кода, например, быстрому созданию тел функций и методов из прототипов сразу в нужном месте, и т.п.). Сравнивал я с Clion: последняя удобная по части быстрых подсказок и некоторой автоматизации по исправлению косяков, но по большей части менее удобная и невероятно тяжеловесная (да "здравствует" Java).
    Ответ написан
    Комментировать
  • Как защитить от спама формы landing page без капчи?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Как сказал FanatPHP , можно сделать поля-ловушки. У меня немного другой метод, но тоже довольно эффективный:
    - создать НЕСКОЛЬКО полей, таких как "phone", "homepage", "skype" и др (на что фантазии хватит). Они должны быть полноценными полями, не `type=hidden`!
    - сделать их на уровне CSS скрытыми (сделать класс, который их будет скрывать, либо скрывать их по каждому ID-тэгу). По коду эти поля должны выглядеть максимально естественно и не отличаться от остальных. (чтобы человек их не видел, но чтобы их видел бот и думал, что это естественные поля на форме).
    - под капотом, следить за тем, чтобы эти поля были пустыми.
    - если это был бот, он обязательно заполнит эти поля. И если они заполнены, то сделать вид, что всё было успешно, НО, при этом под капотом ничего не делать. Пусть бот тратит время на пустые надежды!
    Ответ написан
    2 комментария
  • Какой веб интерфейс выбрать для почты?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Для себя я гоняю AfterLogic Webmail Lite: красивый приятный интерфейс, интуитивность, легковесность и легко установить.

    Заценить можно тут: https://www.afterlogic.org/webmail-lite

    (P.S. для себя я предпочитаю толстый почтовый клиент как Thunderbird или Evolution, а веб-почта так, резерв для работы на чужом компьютере)
    Ответ написан
    Комментировать
  • Отправка писем PHP, что я делаю не так?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Я рекомендую не использовать функцию mail() вообще, а использовать вместо неё прямое SMTP-соединение через сокеты. Как буду на работе, подгоню скрипт-пример.
    Ответ написан
  • Как вы управляете своими серверами?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    1) SSH
    2) SSH & X-forwarding
    3) xrdp
    4) Самописная веб-морда для управления почтовым сервером, авторегой SSH-учёток, стоп/старт/перезапуск демонов, выдачей/отзывом сертификатов OpenVPN, создание/удаление виртуальных хостов апача по пользователям
    5) приносной монитор и клавомыш, если дела совсем плохи, либо бяка с сетью
    Ответ написан
    2 комментария
  • Стоит ли переписывать интерфейс с QT на QML?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    - Чистый Qt5 - для настольных GUI-приложений. Если правильно походить к вопросу, редактором форм можно спокойно творить чудеса, а также лучше не создавать готовые функции-слоты запросом из редактора форм, а сделать лябмду самому во время инициализации формы, и присобачить к сигналу с формы.
    - QML специально заточен для сенсорных интерфейсов, игр, мультимедиа-приложений: всевозможные анимашки и простота создания, поэтому, как сказал Яков Е , переходить стоит, как раз случай.
    Ответ написан
    Комментировать
  • Как программно сменить цвет QFrame?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Для любого виджета есть setStyle(), который ест строку с css стилем.
    Ответ написан
    1 комментарий
  • Существуют ли универсальные способы обезопасить php сайты?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Обязательно:
    * Установить и настроить SUExec, и желательно настроить так, чтобы папка сайта (например, "Public_HTML" или "www", или site1/www, site2.www, etc.) была в хомяке зверя (по SFTP удобнее будет лазать)
    * Каждый зверь должен иметь свой UNIX-аккаунт и регу на MySQL-сервере (каждому одну или несколько базок)
    * Желательно собрать php из исходников и запускать через CGI (SUExec работает только на CGI), можно юзерям назначать INI-файлы индивидуально (например, включать/выключать определенные модули)

    Что на счёт самих CMS, средствами OS можно лишь назначить владельцем рута и штатные CMS-ные файлы сделать "только чтение". Тем самым изменять файлы самой CMS не получится ни у кого, а вот использовать - на здоровье. Только один минус: теряется возможность автообновления, потребуется рут, чтобы заменить такие файлы. На стороне MySQL от аварии не спасёт если один из плагинов коряво попытается изменить одну из существующих таблиц (тем самым испортив её), а не добавить новую, для себя.
    Ответ написан
  • Старый интерфейс Yandex.Mail, как вернуть?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Пользуйтесь почтовыми клиентами по типу Mozilla Thunderbird, The Bat! или MS Outlook, они сами по себе никогда не обновятся до неузнаваемости, особенно если срубить все обновы. Протокол почты остался тот же самый (POP3 и IMAP) и почти не меняется, за исключением POP3-SSL/IMAP-SSL, которые поддерживают более стойкие сертификаты и старые Яндекс отказался поддерживать. Отучайтесь сидеть в веб-интерфейсе! Иначе если критично хранить письма на сервере - используйте протокол IMAP. (POP3 позволяет только скачать все письма на компьютер, и по-умолчанию почтовые клиенты удаляют письма с сервера)

    P.S. MS Outlook каким бы крутым и функциональным не был - он очень уязвим, и это главная мишень для вирусописателей, которые шлют письма с вирусами. Поэтому Thunderbird советую как более дружелюбный, почту настраивать автоматически умеет и не нужено много заполнять с адресами серверов и портами (Яндекс по крайней мере надёжно работает)
    Ответ написан
    Комментировать
  • Что сделать, чтобы так не было - функция printf не выводит в консоль ничего С++?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Если собирать файл через g++ file.cpp -o file.exe, то думаю проблем не будет. Хотя как тут упомянули, попробуй добавить fflush(stdout); сразу после всех printf(); перед getch(); Из-за того, что я в своём Qt-приложении перенаправил вывод с qDebug() в файл, то чтобы просто отпечатать в отладочной консоли, я писал printf() и тут же fflush(stdout); иначе все сообщения выводятся только после закрытия приложения
    Ответ написан
    Комментировать
  • Какую операционную систему выбрать для сервера?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Если хочется стабильности и надёжности - лучшее решение это CentOS, однако ввиду того, что у Вас больше опыта с Ubuntu, то стабильное решение для Вас это будет Debian, от которого собственно, Ubuntu и выросла. Ubuntu на сервер не рекомендуется, особенно если учесть, что очень велика вероятность появления забагованного ПО, что будет мешать работе сервера или будет провоцировать сбои в работе. Поэтому Вам решать: удобство в настройке или всё-таки стабильность и надёжность?
    Ответ написан
  • Какие самые печальные/курьезные по последствиям баги в вашей практике (или о которых знаете)?

    Wohlstand
    @Wohlstand
    Инженер-программист С++
    Очень тупой и назойливый баг в инсталяторе моего движка: вместо того, чтобы добавить в конец, инсталятор перезаписывал переменную PATH, из-за чего у многих из-за этого начались страшные глюки на компьютерах, случайно нашёл как протестил инсталлер на компьютере друга, потом заметил, что xcopy не работает. (К счастью на лине не всё так просто испортить, поэтому в линуксовых ти макосных сборках проблем не было.)
    Ответ написан
    2 комментария
  • Как сделать возможность выделять и хватать невидимые (полностью прозрачные) объекты в QGraphicsScene?

    Wohlstand
    @Wohlstand Автор вопроса
    Инженер-программист С++
    Фуф, сам нашёл решение:
    дело в самих QGraphicsPixmapItem. Всё элементарно, просто установить режим формы на "BoundingRectShape"
    Item->setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
    Ответ написан
    Комментировать
  • Как реализовать двустороннюю связь между классами С++ MainWindow mdiSubWindow GraphicsScene?

    Wohlstand
    @Wohlstand Автор вопроса
    Инженер-программист С++
    Всё, я решил задачу сам!
    Делюсь с теми, кто задаётся тем же вопросом:

    Для этого я использовал метод "внешний указатель" для обеспечение обратной связи сцены в MainWindow.

    Спасибо за подсказку одному моему австрийскому другу.

    1) создаём статический указатель (на всякий случай, я запаковал его внутрь класса)
    class MainWinConnect
    {
    public:
        static MainWindow * pMainWin;
    };

    и где-нибудь создаём тело для этого же указателя:
    MainWindow * MainWinConnect::pMainWin;

    2) В конструкторе нашего класса MainWindow просто записываем адрес самого себя прямо в наш указатель:
    MainWinConnect::pMainWin = this;

    3) Теперь стало возможным обращаться к функциям MainWindow практически из любого места, даже если объект класса MyScene создан непосредственно внутри самого MainWindow.
    class MainWindow
    {
       public:
          void callMe(int someData);
         ...
       MyScene * scene;
    }
    
    void MyScene::doSomething()
    {
           ...
           MainWinConnect::pMainWin->callMe(1234);
           ...
    }


    Недостаток метода: подходит для классов-одиночек, поэтому любые обратные обращения лучше выполнять через сигналы-слоты, либо размещать все важные указатели прямо в классе-дочке
    Ответ написан
    Комментировать