Задать вопрос
  • Должен ли программист думать о дизайне?

    Maksclub
    @Maksclub Куратор тега Карьера в IT
    maksfedorov.ru
    Программист тоже дизайнер
    https://www.youtube.com/watch?v=h4QuJ0xBGfc
    Ответ написан
    Комментировать
  • Сборка пк для игр 21-23г?

    xez
    @xez Куратор тега Компьютеры
    TL Junior Roo
    Мне не кажется покупка 3090 рациональным шагом: мизерный прирост производительности, по сравнению с 3080, но цена вдвое больше. 3080, конечно, надо будет подождать....
    Насчет K процессора и топовой матери - такие-же соображения. Зачем переплачивать и потом еще разоряться на киловатный БП, если вы не заметите разницу в играх (я так понимаю, компьютер для "поиграть" собирается)?
    С таким солидным бюджетом я бы не стал брать hdd вообще. SSD какой-то маловатый. Берите лучше M2 от 500Гб под систему и SATA SSD под файлопомойку.
    Thermalright Macho - ок, но вроде noctua лучше?..

    Итого:
    SSD - побольше. HDD - не нужен.
    Остальное - ок, но можно сильно сэкономить без особых потерь производительности.
    Ответ написан
    1 комментарий
  • Должен ли программист думать о дизайне?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Дизайн программисту знать не нужно. Но если вы занимаетесь разработкой графического интерфейса, то стоит следовать общепринятым практикам и учитывать UX.
    Ответ написан
    Комментировать
  • Как установить свежий PHP8?

    Я не до конца понимаю кто этот ondrej и можно ли вообще доверять этому репозиторию? - этому репу все доверяют
    Ответ написан
    1 комментарий
  • Бесплатный хостинг с доменом и Zend Optimizer?

    Sanes
    @Sanes
    Хостинг 100 руб. стоит. Откуда такая жадность у людей...
    Beget Free
    Ответ написан
    1 комментарий
  • Какой минимум знаний должен быть у Системного администратора Linux?

    Sanes
    @Sanes
    Поставленные задачи должен решать. Они везде разные.
    Ответ написан
    3 комментария
  • Нужно ли проверять каждое обращение к БД на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очень хороший вопрос.
    Он вызван одной из родовых болезней РНР, в котором по какой-то причине именно операции с базой данных традиционно проверяются на каждый чих. При этом на все остальные операции почему-то никто не обращает внимания.

    Большинство складывателей букв на РНР об этом не задумываются вообще, и очень хорошо что тебе пришел в голову этот вопрос. А ответ на него очень простой:

    Проверять обращения к БД не нужно вообще

    (за исключением нескольких специальных случаев, когда есть определенный сецнарий обработки ошибки)
    Если же такого сценария нет, то никак проверять не нужно. Просто потому, что обращения к БД ничем не отличаются от любого другого кода.
    И поскольку ты не проверяешь каждый include или там оператор деления, то не нужно и проверять запросы к БД. Их надо оставить в покое. И первый, и каждый по отдельности, и все 5 разом.

    А вот что нужно сделать - это договориться с РНР, чтобы он сам сообщал тебе об ошибках в запросах. Для mysqli надо написать перед коннектом
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    Для ПДО при соединении выставить в настройках соединения

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

    Всё. Больше ничего для обращений к БД делать не надо.

    А вот обработчик ошибок, общий для всего кода, а не только для работы с БД, настроить желательно.
    Чтобы AJAX-скрипт подписки получал соответствующий НТТР статус при любой ошибке, которая может возникнуть на сервере.
    Ну и разумеется AJAX-скрипт подписки должен проверять НТТР статус, и обрабатывать ответ только если статус= 200
    Пример обработчика можно посмотреть здесь

    Если же надо убедиться, что все пять запросов выполнились без ошибок, то для таких целей служат транзакции.
    Суть транзакции именно в том, что либо выполнияются либо все запросы, либо ни одного.
    Если заключить все 5* запросов в транзакцию, то если при выполнении одного из них произойдет ошибка, то изменения, сделанные остальными, автоматически откатятся!

    *На самом деле в транзакцию имеет смысл заключать только запросы, изменяющие данные. То есть все, кроме первого.

    Соотсветственно, если ПДО настроен на выброс исключений, то при ошибке запроса
    - пдо выбросит ислючение
    - которое будет поймано обработчиком ошибок
    - который выведет код ошибки и завершит работу РНР скрипта
    - при завершении скрипта РНР закроет соединение с БД
    - БД при закрытии соединения автоматически откатит незавершенную транзакцию

    причем без обработчика ошибок будет всё то же самое, только клиенту уйдет код не 500 а 200

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

    1. выставить для ПДО режим исключений
    2. перед первым запросом написать $pdo->begin();
    3. после последнего запроса написать $pdo->commit();
    Ответ написан
    4 комментария
  • Как писать внятное ТЗ, не используя ГОСТ?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    Ни разу не сталкивался с ТЗ по 19 (ЕСПД), но постоянно работаю с ТЗ по 34 (АС). Тем, кто говорит, что ГОСТ это про бюрократию, рекомендую в ограниченные сроки создать автоматизированную систему с нуля хотя бы масштаба одного города, в которой будут работать хотя бы человек 20, поработать с инфобезом по ней. Сразу станет понятно, для чего ГОСТ 34 нужен, и ПМИ для чего, и проект на систему.
    Ответ написан
    5 комментариев
  • Каким регулярным выражением можно найти знак ")"?

    @dodo512
    Экранируй \)
    preg_replace('~\)~', '', $text);

    Или используй символьный класс [)]
    preg_replace('~[)]~', '', $text);
    Ответ написан
    Комментировать
  • Каким регулярным выражением можно найти знак ")"?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно экранировать его:
    \)
    spoiler
    $re = '/\)/';
    $str = 'Hi (all)!';
    
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    // Print the entire match result
    var_dump($matches);

    https://regex101.com/r/tRw8Ug/2
    Ответ написан
    Комментировать
  • Как быстрее запоминать как пишется код?

    GavriKos
    @GavriKos
    1. Использовать IDE, а не их подобия или блокноты
    2. Подтягивать английский
    3. Вникать в логику кода, а не копипастить
    4. Вникать в логику слов.
    5. Мнемонические правила запоминания юзать
    Ответ написан
    Комментировать
  • Как создать таймер с голосовым управлением?

    GavriKos
    @GavriKos
    Ардуина не вывезет распознавание голоса. Обычно вообще все такие устройства не распознают команды самостоятельно, а отправляют их на сервак для распознавания. Сервак может быть как ваш (с самописными или готовыми библиотеками), так и можно подключать готовые АПИ (у того же яндекса они есть).

    Но может оказаться что в итоге дешевле купить готовое, типа яндекс.станции
    Ответ написан
    2 комментария
  • Чем можно заменить localStorage?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вам недостаточно инструкции? Не храните в localStorage чувствительные данные, обязательно проверяйте данные на сервере, если они изменены вносите клиента в бан лист
    Ответ написан
    1 комментарий
  • Почему не подключается Js скрипт?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    А Вы пробовали пройти Вашу строчку по шагам?
    app.use( // 5
      express.static( // 4
        path.join( // 3
          __dirname, // 1
          'public' // 2
    )))

    1. __dirname - Содержит абсолютный путь до папки с файлом в котором выполняется (для примера пусть будет '/path/to/project')
    2. 'public' - просто строчка
    3. соединяем (1) и (2) как путь, получим '/path/to/project/public'
    4. express.static - принимает путь из (3) и создает функцию которая обрабатывает запросы и ищет им соответствие в виде файлов в указанной папке
    5. app.use - просто подключает функцию из (4) к движку express'а, без каких либо фильтров, то есть функция static обработает абсолютно все запросы которые дойдут до нее

    Теперь смотрим на шаблон, в нем прописан скрипт public/reglog.js
    Это относительный путь, то есть он автоматом соединится с путем от куда вызван
    то есть если main.hbs отрисуется в условный site.com/index.html - то скрипт запросится из
    а если main.hbs отрисуется в условный site.com/some/nested/index.html - то скрипт запросится из site.com/some/nested/public/reglog.js

    Теперь представьте, в функцию 4 попадает запрос /some/nested/public/reglog.js
    она соединяет ее с путем из (3) и получает путь /path/to/project/public/some/nested/public/reglog.js
    потом смотрит его на диске и естественно ничего не находит, ставит в express response статус 404 и отдает управление дальше в express

    для ленивых, которым готовый суп, а не разобраться почему
    <script src="/reglog.js"></script>
    Ответ написан
    1 комментарий
  • Что надо знать и уметь, чтобы претендовать на позицию Джуниора?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Всем доброго времени суток. У меня, как и у тысячи других новичков, со временем возникает подобный вопрос "Что надо знать на старте, чтобы трудоустроиться на низшую позицию junior Front-end?".

    Уметь воспользоваться гуглом чтобы найти готовые 1000 ответов. Ну вот серьезно.

    Коротко о моём опыте.

    Никому не интересно. Все полезное должно быть в резюме, остальное - держи в себе.

    В частности на данный момент я владею html (flex-box), css (основы препроцессора Less), основы JS(массивы и их методы, что такое объекты и как получить значения из этих объектов, функции, циклы. Работа с DOM-элементами)

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

    React + Redux (читай, почти не писал на нём. Хотя в планах знакомый предлагал написать совместный проект на нём "Подсчёт каллорий")

    Ну это было бы ХОТЬ ЧТО-ТО.

    Github

    Это что? знание гитхаб? Как зайти на сайт и зарегаться? Ну прямо очень важно...

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

    Без практики - все пустой звук. Забил - наслаждайся.
    Порешать задачки - зайди на фриланс, почитай чего люди хотят, потренируйся дома что-то сделать. Либо сделай хобби проект для себя. Либо надо было с другом сделать калькулятор

    К тому же JS не мало всего. Распыляться и изучать всё. Так всё и не запомнишь сразу.

    ИТ - сфера, где нужно учить много. Если ты столкнулся с тем, что для тебя там действительно немало всего, то не думай что можно что-то не учить. Это не распыляться, это и означает изучить конкретную небольшую область.

    Некоторые вещи используются в практике редко или вообще ни кто так не делает. Чтобы не забивать голову

    Выбери не-ИТ сферу, тогда не будешь забивать голову. Ну вот серьезно.

    хотелось бы получить направление, что стоит знать Джуну, а дальше в процессе работы уже углубляться в недры JS.

    В вакансиях указывается стек. Чистый js это уже база, сейчас востребованы фреймворки. А их лучше учить, когда базовый js уже на уровне (не циклы и массивы, а нормальный базовый js)

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

    На это всем плевать. И людям на форуме. И работодателю. Платят не за то, что сейчас кому-то очень нужна работа, а за то, что человек умеет выполнять эту работу.

    Если ты гуглишь и никак не находишь вакансию попроще, где тебя уже ждут - так это не потому, что есть секретный ингредиент, как стать джуном за месяц, а потому что джун это уже специалист с кучей знаний, и ты видимо просто не готов учить все.
    Если готов - то нагугли вакансии в своем городе, в компаниях которые тебе нравятся, читай что там требуется, учи и иди на собеседование. Походишь хотя бы на 10 собеседований и будет понятно что конкретно тебе в конкретные позиции нужно еще подучить.
    А вопросы на тостере - тебя на тостере на работу не берут, каждый будет говорить со своей колокольни своего опыта. И опыт трудоустройства 10-летней давности не подходит, а опыт трудоустройства 1-месячной давности - не статистика, на которую можно полагаться, а конкретный один эпизод. Поэтому набирай СВОЙ ЛИЧНЫЙ опыт - собеседования.
    Ответ написан
    1 комментарий
  • Чем следить за сотрудником?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Занесите в базу левые данные(например, жены, мужа, брата, свата, своей собаки) и дайте эти разные данные разным сотрудникам. Если позвонят на их номера(можно купить левые сим карты) не из вашего офиса, или на почту(лучше новую зарегистрировать) посыпется спам, можно точно вычислить крысу.
    Либо же есть еще 100% вариант, но не знаю, понравится вам он, или нет. Если у вас есть служба безопасности(если нет, можно бригаду нанять), только не экономить. Они быстро вычислят. А вы получите такую компенсацию, которая окупит и бригаду, и всё остальное.
    Ответ написан
    7 комментариев
  • Как организовать поиск собеседника в вк боте?

    lxstvayne
    @lxstvayne
    Люблю Python
    Можно апи использовать и писать код красивее. Читабельность падает сразу, когда видишь такой код. И, пожалуйста, вставляйте код в блок.
    Ответ написан
    Комментировать
  • Как правильно связать несколько таблиц?

    @Nc_Soft
    <?php
    $model = \App\Models\Building::where('id', 1)->with('street.settlement.subregion.region.country')->first();
    echo $model->address;

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Building extends Model
    {
        public function street()
        {
            return $this->belongsTo('App\Models\Street');
        }
    
        public function getAddressAttribute()
        {
            $parts = [
                $this->street->settlement->subregion->region->country->title,
                $this->street->settlement->subregion->region->title,
                $this->street->settlement->subregion->title,
                $this->street->settlement->title,
                $this->street->title,
                $this->title,
            ];
            return join(', ', $parts);
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Street extends Model
    {
        public function settlement()
        {
            return $this->belongsTo('App\Models\Settlement');
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Settlement extends Model
    {
        public function subregion()
        {
            return $this->belongsTo('App\Models\Subregion');
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Subregion extends Model
    {
        public function region()
        {
            return $this->belongsTo('App\Models\Region');
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Region extends Model
    {
        public function country()
        {
            return $this->belongsTo('App\Models\Country');
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Country extends Model
    {
    
    }


    DROP TABLE IF EXISTS `buildings`;
    CREATE TABLE `buildings` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `street_id` int DEFAULT NULL,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    DROP TABLE IF EXISTS `countries`;
    CREATE TABLE `countries` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    DROP TABLE IF EXISTS `regions`;
    CREATE TABLE `regions` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `country_id` int DEFAULT NULL,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    DROP TABLE IF EXISTS `settlements`;
    CREATE TABLE `settlements` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `subregion_id` int DEFAULT NULL,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    DROP TABLE IF EXISTS `streets`;
    CREATE TABLE `streets` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `settlement_id` int DEFAULT NULL,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    DROP TABLE IF EXISTS `subregions`;
    CREATE TABLE `subregions` (
      `id` bigint unsigned NOT NULL AUTO_INCREMENT,
      `region_id` int DEFAULT NULL,
      `title` varchar(255) COLLATE utf8mb4_ru_0900_ai_ci DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ru_0900_ai_ci;
    
    INSERT INTO `buildings` (`id`, `street_id`, `title`) VALUES
    ('1', '1', '43');
    
    INSERT INTO `countries` (`id`, `title`) VALUES
    ('1', 'Российская Федерация');
    
    INSERT INTO `regions` (`id`, `country_id`, `title`) VALUES
    ('1', '1', 'Алтайский край');
    
    INSERT INTO `settlements` (`id`, `subregion_id`, `title`) VALUES
    ('1', '1', 'г. Барнаул');
    
    INSERT INTO `streets` (`id`, `settlement_id`, `title`) VALUES
    ('1', '1', 'ул. Пушкина');
    
    INSERT INTO `subregions` (`id`, `region_id`, `title`) VALUES
    ('1', '1', 'Алтайский район');
    Ответ написан
    3 комментария
  • Откликнулся на заказ, а при общении с заказчиком отказался: допустимо?

    Sanes
    @Sanes
    Нормально. Потому что из заказчика приходится клещами вытягивать, что он хочет.
    Ответ написан
    Комментировать
  • Возможно ли такая функция?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всё надо учить. И ООП, и MVC, и фреймворки.
    А перед этим надо освоить чистый РНР. Плюс SQL, базы данных, программирование, протоколы, безопасность, устройство серверов
    От курсов толку не будет, надо купить нормальную книжку. И не одну.
    Ну и запастись терпением.
    Годика через два-три сможешь создать нормальный веб-сайт.

    функцию создать можно.
    Ответ написан
    1 комментарий