Задать вопрос
  • Есть ли смысл изучать мобильную разработку в ближайщие 10 лет?

    @evgeniy_lm
    Прочитайте рассказ А. Азимова "Профессия" там ответ на ваш вопрос
    Ответ написан
    1 комментарий
  • Можно ли обратиться к статическому полю шаблона класса без инстанцирования шаблона?

    @sergiodev
    class CircularBufferBase
    {
    public:
        static const int32_t MEMBER_TO_BE_ACCESSIBLE_OUTSIDE = 0;
    };
    
    template <typename T, int32_t maxSize>
    class CircularBuffer : public CircularBufferBase {
        ...
    }


    CircularBufferBase::MEMBER_TO_BE_ACCESSIBLE_OUTSIDE
    Ответ написан
    1 комментарий
  • Как быстро и надежно закрывать задачи по сайту не нанимая программиста?

    nowm
    @nowm
    Могу ответить с точки зрения фрилансера:

    Если через пару месяцев сложно рассчитывать на работу, значит у вас есть какие-то проблемы в организации работы. Например, с вами психологически тяжело общаться в процессе или вы не спешите оплачивать работу, задерживаете оплату и т.п. Если человеку стало некомфортно с вами работать, он обычно доделывает текущую работу, но дальше с вами работать никогда не будет — будет только придумывать отмазки, что сейчас завален работой или тому подобное. Напрямую такие вещи высказываются очень редко.

    Вот несколько советов, которые помогут улучшить «возвращаемость» фрилансеров:
    • Чаще всего фрилансер готов делать работу сразу (особенно когда работает с вами первый раз), он показывает рвение и очень быстро всё делает. С вашей стороны ожидается, что вы можете оплатить работу мгновенно после того, как всё сделано и проверено как фрилансером так и вами. Если вы скажете фрилансеру, что вам нужно некоторое время, чтобы дойти до банкомата и пополнить счёт, потому что прямо сейчас не можете заплатить, это очень сильно испортит впечатление, и с большой вероятностью человек не покажет виду, спокойно без психов подождёт, когда вы ему заплатите, но в следующий раз работать с вами больше не будет. Фрилансер готов работать сразу, значит и вы должны быть готовы платить сразу.
    • Если у вас низкая техническая подготовка, и фрилансеру приходится кроме самого кода очень много общаться с вами на тему, что именно нужно делать, желание работать дальше тоже пропадает. Чем меньше требуется обсуждений и созвонов в мессенджере, тем больше веротность, что фрилансер и дальше будет с вами работать. Фрилансеры обычно не считают переписку частью оплачиваемой работы и, соответственно, чем больше времени будет занимать переписка, тем меньше будет желание продолжать работу. Фрилансер обычно хочет сразу делать работу и не отвлекаться на всякую бесплатную болтологию.
    • Если фрилансеру нужно заниматься в дополнение администрированием вашего сервера, а это заранее не обговаривалось, это тоже может испортить впечатление. Часто заказчики пишут, что им нужно поправить менюшку на сайте, а это в итоге превращается в правку менюшки, а потом залитие кода на сайт, настройка и перезапуск сервера и ещё какие-то подобные работы, которых в задании не было вообще. И, скорее всего, вы считаете само собой разумеющимся, что фрилансер должен уметь это делать, и думаете, что это нормальная практика, если он в дополнение к кодингу будет делать ещё и это. Дополнительно, если эти моменты ещё и не оплачиваются, шансы, что люди захотят с вами работать и дальше, снижаются ещё сильнее.
    • Некоторые заказчики любят показывать свой авторитет. Запомните, что для фрилансера вы не начальник, а равноправный партнёр, и он ждёт от вас соответствующего уровня общения. Если вы строите из себя начальника, люди будут придумывать любые отмазки, но повторно работать не станут.


    Вот это основные факторы, которые влияют на то, что вам ответит фрилансер, если вам понадобится помощь в следующий раз, и вы решите, что можно обратиться к тому, с кем раньше работали.
    Ответ написан
    8 комментариев
  • Как быстро и надежно закрывать задачи по сайту не нанимая программиста?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Я пишу со стороны программиста. У меня есть ряд старых клиентов, которые иногда просыпаются и просят что-то доделать. Стараюсь найти для них время и помочь.

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

    Тут есть один момент - разработчику обычно несложно взять подработку 5-10 часов в неделю. Но не стоит ждать, что человек всё бросит и всю неделю будет фулл-тайм колбасить ваши задачи. Если вы хотите, чтобы сделали большой объём быстро, тогда придётся каждый раз нанимать по новой. А если сможете разбить объём на маленькие части, которые можно делать, не отрываясь от основной работы, то вам должно быть по силам нанять такого человека.
    Ответ написан
    1 комментарий
  • Как передать массив в функцию С++ ( пишет no matching function to call)?

    @res2001
    Developer, ex-admin
    Написал опус на вопрос, который вы удалили, хорошо сохранился в буфере обмена :-) а то было бы обидно.

    Ваш массив пожно просто привести к указателю, по старинке (int*)a или используя касты.

    Но у вас тут на самом деле 2 проблемы.
    Первая - обращение к элементам массива в average используя [i][j]. Вторая - VLA.
    По первой проблеме:
    В С/С++ оператор индексации (array[i]) выполняет следующее действие: *(array+i).
    Отсюда должно быть понятно, что раз array у вас это int*, то после array[i] вы получите int, от которого уже нельзя взять второй индекс, т.к. это просто 1 int, а не массив.

    Отсюда есть несколько выходов:
    1. дурацкий (самый долгий по исполнению и затратам памяти): использовать динамический массив массивов
    Выглядит примерно так:
    int **array = new int*[rowCount];
    for(int i=0; i < rowCount; ++i)
       array[i] = new int[colCount];

    Как видите array превратился в двойной указатель, теперь каждый элемент в первом измерении - это указатель на одномерный массив. Всего у вас получается rowCount + 1 выделений памяти. Не забудьте столько же раз вызвать оператор delete.
    В average теперь передавайте int** и у вас будет работать оператор [][], т.к. первая индексация уже будет возвращать int*.
    Не рекомендую использовать этотт способ.

    2. Вычислять индекс массива вручную (не использовать индексацию):
    *(array + i*colCount + j)
    Это такой хардкорный стиль. Но зато работает быстро и масштабируется на массивы любой размерности без особых проблем.

    3. использовать std::vector<std::vector<int>> - это то же самое, что и вариант 1, но закамуфлированный под вектор :-)

    Вторая проблема это VLA (Variable Length Array).
    Статические (автоматические) массивы в С++ вы можете определять, только константным размером (размером известным на этапе компиляции).
    У вас же размерность массива динамическая (вводится пользователем во время выполнения программы). Отсюда следует, что вы должны использовать динамические массивы, выделенные с помощью new.
    В стандарте С++ нет VLA. VLA есть только в Си и то начиная с С99.
    Ваша функция task3 компилируется, только потому что в gcc/clang по умолчанию включены расширения. В расширения входит так же и возможность использовать VLA. Если задать опциями более строгое соответствие стандарту С++, то функция не соберется.
    И кстати, например в микросовтовский компилятор VLA до сих пор не завезли.

    Но если уж у вас есть VLA, то вы можете преобразовывать указатель в VLA массив с помощью такой кучерявой конструкции:
    int (*array2)[colCount] = (int(*)[colCount]) array;

    В этом случае обращаться к элементам массива можно как обычно через двойную индексацию: array2[i][j]
    Когда-то делал тест на эту тему: https://ideone.com/4i6lRw
    Кстати, если в average сначала передать размерности, и последним параметром массив, то по идее массив можно сразу объявить двумерным, используя ранее переданные размерности:
    void average(int rowcount, int colcount, int aarray[rowCount][colCount])

    Это то же VLA.

    Вообще не рекомендую в С++ использовать VLA, т.к. программа становится не переносимой и зависимой от компилятора.
    Ответ написан
    4 комментария
  • Как будет правильней?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Уважаемый, Вам нужно изучать основы MySQL. Ваша задача решается одним запросом и 3-мя строками кода.

    <?php
      $query = "SELECT  DATE(`time`) `Day`, SUM(`Profit`) `DaylyProfit`
    			FROM `history`
    			WHERE  `type` = 1 AND `time` > DATE_SUB(CURRENT_DATE, INTERVAL 6 DAY)
    			GROUP BY `Day`
    			ORDER BY `Day` DESC;";
    
    $result = $mysqli->query($query);
    
    $all = $result -> fetch_all(MYSQLI_ASSOC);
    
    
    echo json_encode($all);


    Test PHP MySQL online
    Ответ написан
    1 комментарий
  • Почему выдает ошибку при загрузке фотографии?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То, что папка images находится в папке с product.php, не имеет вообще никакого значения.
    product.php не имеет отношения к работе веб-сервера. из неё просто читается код класса.

    При этом путь images/ является относительным. То есть, в зависимости от точки входа может вести в совершенно разные места.
    Именно поэтому все пути всегда должны быть абсолютными. Пусть даже и с помощью костыля __DIR__
    Ответ написан
    2 комментария
  • Стоит ли учить Boost в 2021 году?

    @res2001
    Developer, ex-admin
    Вполне востребованная библиотека.
    Но учить не стоит. Стоит знать, какие возможности она предоставляет и как ее исопльзовать в своем проекте. Сделать пример с какими-нибудь достаточно сложными компонентами буста, например asio.
    Ответ написан
    Комментировать
  • Что изменить в базе данных?

    @ComodoHacker
    Ошибка первая — не понятно, какую задачу она должна решать. "Получить зачет"?
    Ответ написан
    Комментировать
  • Правильно ли я понимаю что такое Язык программирования?

    GavriKos
    @GavriKos
    Нет, неправильно.
    Во первых - язык это не текстовый файл. Это набор правил (синтаксических, семантических), лексем и прочего.
    Во вторых процесс компиляции не так выглядит совершенно. Компилятор никаких переменных не создает. Более того - там еще есть трансляторы, линковщики, валидаторы и прочее.

    Ну и да, на ассемблере компиляторы давно не пишут.

    И получается если это так то программа написанная на высокоуровневом языке без компилятора просто текстовый файл, а также что готовая скомпилированная программа будет написана на языке ассемблера исходя из того что написано в исходном файле на высокоуровневом языке.

    Ну вот это в каком то приближении правильно, правда необязательно на языке ассемблера.
    Ответ написан
    Комментировать
  • В чем идея и как работают шаблоны?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос очень хороший.
    А ответ на него очень простой.

    Шаблоны нужны для отделения логики приложения от логики отображения.
    Разделив их, мы получим сразу кучу выгод:
    • Нормальную структуру приложения, когда вывод начинается только после того, как отработала вся логика. То есть у нас никогда не будет проблем с ошибкой headers already sent, с возвратом json-а вместо html, с выводом в page header-е тех данных, которые появляются только в процессе работы скрипта
    • Мобильность - один и тот же движок можно будет использовать на нескольких сайтах, меняя только шаблоны, но весь код оставляя одинаковым. Что поможет, в частности, вносить обновления в движок и исправлять ошибки на всех сайтах разом.
    • Разделение труда - сейчас обычно над отображением работают фронтендеры, то есть, когда бизнес-логика отделена от шаблонов, то любой фронт сможет с ней работать


    Соответственно, главное, что надо знать про шаблоны - это то, что любой вывод в РНР скрипте начинается только после того, как отработала вся бизнес-логика.
    Также важно понимать, что в самом по себе смешивании "кода и разметки" ничего ужасного нет. В шаблоне всегда будет код. Без него невозможно выводить динамический контент. Важно только - какой это код, к чему он относится? Код в шаблоне должен относиться только к самому шаблону. На первых порах новичку сложно это отличить. И это еще один плюс специализированных шаблонизаторов.

    После этого есть варианты, которые отличаются в основном удобством работы с кодом шаблона.
    Править HTML код записанный в виде РНР строки - это САМЫЙ неудобный .

    Дальше идут всякие наколенные решения, типа
    бизнес-логика
    include header
    ?>
    хтмл конкретной страницы
    <?php include footer ?>

    или чуть более продвинутый, когда шаблоны хранятся отдельно и могут вкладывться друг в друга. Сначала пишем функцию,
    function render_template($filename, array $data = [])
    {
        ob_start();
        extract($data);
        require __DIR__ . '/' . $filename;
        return ob_get_clean();
    }

    а потом в коде страницы пишем
    бизнес-логика
    ...
    $page_html = render_template('page.tpl.php', [
        'data' => $data,
    ]);
    echo render_template('main.tpl.php', [
        'navigaton' => $nav_list,
        'title' => $title,
        'page' => $page_html,
    ];

    где сами шаблоны это
    ...
            <?php foreach ($navigation as $item): ?>
                <li>
                    <a href="<?= e($item['href']); ?>"><?= e($item['title']); ?></a>
                </li>
            <?php endforeach ?>
    Важно! Любой вывод в этих шаблонах должен экранироваться в обязательном порядке (кроме очевидных случаев, когда мы выводим результат рендера).

    Ну и наконец нормальные шаблонизаторы, из которых я горячо рекомендую Twig.
    Главное, что про него надо знать - даже самые зелёные нубы осваивают его без затруднений. И настоятельно рекомендую сразу перейти на него, после того как наиграетесь с решениями на коленке.
    Ответ написан
    9 комментариев
  • Создание файла txt и запись в него C++?

    @res2001
    Developer, ex-admin
    Смотри сначала сюда: https://en.cppreference.com/w/cpp/io/basic_fstream
    Потом сюда: https://en.cppreference.com/w/cpp/io/basic_filebuf/open
    fstream открывает файл по умолчанию (как у тебя) в режиме in|out, а это значит, что если файла не существует, то возникает ошибка (смотри таблицу по второй ссылке). Логика такая, что если ты открываешь файл для чтения (тут не важно, что он открывается еще и для записи) без дополнительных флагов, то файл должен существовать.

    В пару с ifstream, который открывает файл для чтения, существует и ofstream - он открывает файл для записи. При использовании ofstream не существующий файл будет создан (смотри таблицу по второй ссылке).
    Ответ написан
    Комментировать
  • Создание файла txt и запись в него C++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    https://stackoverflow.com/questions/15667530/fstre...

    Про флаги можно подробнее почитать, внезапно, в документации https://www.cplusplus.com/reference/ios/ios_base/o...
    Ответ написан
    Комментировать
  • Как запретить PHP следовать HTTP заголовку Location?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос редкий в своей бессмысленности.
    Причем с самого начала. С какой стати "запрет просматривать каталоги" имеет хоть какое-то отношение к "безопасности сайта"?
    Дальше уже смешно. Что это за "технические причины", которые позволяют написать в .htaccess какой-нибудь, скорее всего, RewriteRule, но Options -Indexes написать вдруг не дают?
    Дальше идет совсем уже какое-то безумие, "не могу запретить, поэтому сделал редирект на него". ШТА? Может быть всё-таки не на него, а из него?

    Ну и вишенка на торте - оказывается, безопасность сайта зависит от способности РНР не реагировать на редирект. Вся инфраструктура мира, безопасность банков и атомных станций под угрозой: вопрос века: следует ли пых-пых заголовкам, или нет.

    Я уже не говорю про то что "PHP" не следует никаким заголовкам. Есть несколько разных способов сделать НТТР запрос из РНР, и соответственно, для каждого способа запрет следования заголовку Location будет разным. То есть, не указывая способ, которым делается запрос, надеяться на ответ несколько наивно.
    Ответ написан
    Комментировать
  • Как запретить PHP следовать HTTP заголовку Location?

    DevMan
    @DevMan
    да никак. просто не отправляйте его.
    и, для тех кто в танке, локейшену следует клиент, а не слоник.

    а просмотр каталога запрещается другими средствами.
    Ответ написан
    3 комментария
  • Как сделать вхождение по TAB в терминале linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    bash completion - это большая библиотека функций, которые по tab умеют дополнять
    * имена алиасов
    * имена функций
    * имена переменных
    * названия команд
    * пути файловой системы
    * опции для некоторых команд.

    Можно почитать документацию, как добавить дополнение для вашей собственной команд - https://www.gnu.org/software/bash/manual/html_node...
    Ответ написан
    Комментировать
  • Ошибка при установке Wine в Linux Mint 19.3?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Потому что неправильно устанавливаете Wine.
    Из реп не самый лучший и рабочий способ!

    Устанавливайте по инструкции из Wine Wiki.
    Ответ написан
    2 комментария
  • Ошибка при установке Wine в Linux Mint 19.3?

    bingo347
    @bingo347
    Crazy on performance...
    sudo apt install winehq-stable
    6.0.2~buster-1 - это не пакет, это актуальная версия пакета winehq-stable в репозиториях Вашего дистра
    Ответ написан
    2 комментария
  • Кто-нибудь знает хорошие онлайн-курсы по Питону с нуля?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Либо человек способен учиться по учебникам, либо не способен быть программистом.
    Ответ написан
    Комментировать
  • В чём смысл передавать array_reverse в foreach без явной необходимости обратного порядка элементов?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для ответов на подобные вопросы всегда полезно использовать логику.
    Например:
    Если необходимости в обратном порядке элементов нет, то array_reverse не нужна.
    Если array_reverse используется - значит, скорее всего, необходимость есть, но вы её просто не видите.

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

    "оставить исходный массив нетронутым" причиной не является.
    Ответ написан