• Обязательно ли производить добавление данных через транзакцию?

    Stalker_RED
    @Stalker_RED
    Если вы вносите что-то одним запросом - не обязательно.

    Смысл транзакции - обработать какую-то цепочку дествий, которые нельзя разрывать.
    Например, у пользователя есть корзина с заказами, и он пытается ее оплатить.
    Нужно
    1. списать деньги со счета юзера
    2. очистить корзину
    3. уменьшить кол-во доступного в магазине товара
    4. отправить уведомление службе доставки, мол отвезите вон туда три телевизора и чайник, например.

    И вот вы это все делаете БЕЗ транзакции, и на втором пункте молния ударила в серверную, и сгорел блок питания.

    Вам все починили, но юзер жалуется: деньги списаны, а товара нет!

    А если перед пунктом 1 начать транзакцию, то при возникновении ошибки или сбоя на любом из этапов, откатится вся транзакция.
    Деньги вернутся на счет, корзина снова будет наполнена, вот это все.
    Ответ написан
    2 комментария
  • Как на php указать альтернативное расширение файла?

    @bkosun
    Нужно определить расширение файла, прежде чем генерировать ссылку:

    $ext = pathinfo($path, PATHINFO_EXTENSION);

    https://www.php.net/manual/ru/function.pathinfo.php
    Ответ написан
    Комментировать
  • Важна ли вёрстка работодателю?

    Sanes
    @Sanes
    Если занимаетесь бекендом, то не надо костылять в верстке. Делайте на фреймворке.
    Ответ написан
    Комментировать
  • Как запускать php скрипт после каждого завершения работы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    просто в командной строке написать
    while true; do php -f /путь/скрипт.php; done
    остановить - Ctrl-C
    Ответ написан
    5 комментариев
  • Кто придумал эту блажь с "mobile first"?

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

    Делай как надо, или не берись за такую "сложную" работу.
    Ответ написан
    4 комментария
  • Как обстоят дела с единым протоколом обмена мгновенными сообщениями (аналог email)?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Попыток было много, а существенных результатов они не дали, как видите. У этого две причины:
    1. Все популярные мессенджеры - продукт крупных компаний, дерущихся друг с другом за пользовательские данные. Им не выгодна унификация, поэтому они будут все свои огромные ресурсы вкладывать в продвижение своих мессенджеров и удушение конкурентов.
    2. Можно создать сколько угодно удобный и функциональный мессенджер, но если не сможешь заманить туда хотя бы миллион привлекательных женщин, он загнётся.
    Ответ написан
    Комментировать
  • Как обстоят дела с единым протоколом обмена мгновенными сообщениями (аналог email)?

    Zoominger
    @Zoominger
    System Integrator
    есть протокол email

    Нет такого протокола.

    Почему нет единого протокола, как с email?

    Был такой, XMPP назывался. Тут проблема не в протоколе, скорее, а в серверах, где хранятся учётки юзеров.

    Возможно уже были попытки такое сделать?

    Так XMPP же.

    Как обстоят с этим дела?

    Он сдох.

    Почему протокол email не обновился до возможностей мессенджера?

    "Почему на грузовики не ставят гоночные двигатели?". Потому что другие задачи.
    Ответ написан
    7 комментариев
  • Как сделать вывод данных?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const output = data
      .map(n => `
        <div>
          <h2>${n.univ} (${n.sotr.length})</h2>
          <ul>${n.sotr.map(m => `
            <li>
              <h3>${m.name}</h3>
              <h3>${m.grade}</h3>
            </li>`).join('')}
          </ul>
        </div>`)
      .join('');
    Ответ написан
    Комментировать
  • Что бы вы сделали с недобросовестным заказчиком?

    sim3x
    @sim3x
    Отставьте емоции в сторону - они вам не помогут
    Определите ваши задачи
    - требуются ли вам ваши деньги за ваше время
    - требуется ли вам ваша репутация
    Если нет, то делайте самое худшее

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

    Есть огромное желание удалить её
    нет

    Научитесь работать с такими клиентами - сейчас у вас идеальная ситуация

    Прямо угрожать удалением не надо
    Оно не поможет получить деньги и попортит вашу репутацию

    Ответ на:
    Жаль, впереди ещё много проектов
    Мне также жаль и хотелось бы продолжить наше сотрудничество
    Для его продолжения мне нужно расчитаться с моими подрядчиками, которые уже выполнили задачи по нашему текущему проекту
    Вы же знаете, как сложно найти хороших подрядчиков и мне не хотелось бы портить с ними отношения

    *Укажите список задач и их стоимость* или даже лучше сумму задолженности без уточнения

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

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

    0xD34F
    @0xD34F
    Странный вопрос. Что в коде написали - то и происходит. Нет у вас там никакого добавления в массив. Если хотите, чтобы text был массивом, тогда делайте так:

    $keyboard['keyboard'][$i]['text'][] = $buttons[$i];
    Ответ написан
    Комментировать
  • Как сделать ответ от php в ajax до завершения выполнения php кода?

    @prostoprofan
    Используйте задачи (крон), например вставляйте в таблицу задачи и временную метку когда задачу надо выполнить, тогда вопрос будет решен
    Ответ написан
    Комментировать
  • Где сейчас тусуются серьезные PHP программисты?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Завсит от цели, для чего это спрашивается.

    Если чтобы поприставать с нубскими вопросами - то нигде.
    Если чтобы почитать умных мыслей - РНР дайджест на Хабре прекрасно суммирует все, что было написано за две недели. У меня например никогда не хватает времени, чтобы прочесть всё. Куда больше-то - я уж и не знаю.
    Если чтобы поучаствовать в серьезном прокете - на гитхабе, выбирай любой.
    Если чтобы послушать интересные доклады и пообщаться вживую - то конференции.
    Если интересует внутренне устройство языка - то php internals.
    Если интересует, что пишут пхп селебрити про что угодно, кроме программирования - то твиттер (Расмус показывает картинки из аэропортов и роботов, которых собирает его сын, Сара постит котиков - и так далее).

    Где точно не тусуются:
    Тостер и всякие подобные ресурсы типа стаковерфлоя.
    Ну то есть специалиста можно найти, если поискать, но концентрация будет гомеопатическая, если учитывать количество восторженных щеночков, которые увидели язык вчера, и спешат срочно поделиться уже накопленным багажом знаний.
    Чаты. Телеграм, дискорд - вот это вот все.
    Самая адовая трата времени, которая в принципе бывает в жизни.
    Опять же, люди пишут о чем угодно, кроме программирования, и ради пары полезных строчек надо убить весь день.
    Ответ написан
    4 комментария
  • Как смириться с тем, что нельзя убирать плохой код на проекте?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Смириться. Рефакторинг редко входит в roadmap проектов у организаций и причин этому несколько:
    - работает не трогай (сломаешь еще чинить придется)
    - зачем платить за тот же результат (редко кто кроме разработчиков понимает зачем нужен рефакторинг)

    Если смириться не получается:
    - сделай оценку изменений
    - составь списк плюсов и рисков этого мероприятия
    - выстави это принимающим решения людям в организации

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Сначала решает драйвер файловой системы. Именно он распределяет запись по кластерам - логическим единицам ФС. Затем он даёт диску команду записать кластер в определённые логические секторы (LBA). Ну а потом уже диск решает, какие именно физические секторы (или блоки для SSD) соответствуют данным логическим.
    У HDD, обычно, это соответствие задано жёстко, за исключением сбойных секторов, которые маппируются по специальной таблице в резервные.
    У SSD есть таблица текущего маппинга, которая постоянно перестраивается так, чтобы максимально равномерно (по количеству циклов записи) задействовать блоки памяти.
    Ответ написан
  • Почему всем так нужен Doctrine, если он много не умеет?

    usdglander
    @usdglander
    Yipee-ki-yay
    Практически любая абстракция над чем бы то ни было - это всегда компромисс между скоростью работы и удобством сопровождения. Доктрина как и любая друга абстракция - это выбор в пользу скорости/удобства разработки с отказом от универсальности в запросах. В вашем проекте был сделан именно такой выбор, правильный или нет - не известно, но если проект уже работает и живёт (и приносит прибыль), то вряд ли этот инструмент заменят.

    Почему доктрину многие так восхваляют?

    Ни один профессионал (если он действительно профи) не будет говорить что вот "это круто", а остальное - говно. Ибо он понимает что каждый инструмент имеет свои плюсы и минусы и подходит для своих задач. Умение видеть этот баланс и есть профессионализм.
    Ответ написан
    1 комментарий
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Как поступают фрилансеры с серверной частью в малых проектах?

    @orbit070
    Я не фрилансер, но делал бы так:

    1. Если сервер не нужен - вопрос решен
    2. Если сервер нужен и его делает третья сторона - вопрос решен
    3. Если сервер нужен и его делать самому, то:

    а) анализ функционала приложения. Если это условно говоря какие-нибудь заметки или список рецептов с сохранением на сервере для надежности, то сообщать клиенту о том, что существует сервер и для чего он нужен смысла нет. Берется бесплатный тариф firebase и готово. Можно даже держать один общий аккаунт для таких "несущественных" серверов.

    б) если приложение потенциально может обрасти большим количеством данных, то объясняем клиенту, что к чему. Что данные где-то надо хранить, и это где-то называется сервер. Что на первых порах можно использовать бесплатное решение(тот же firebase), но если данных станет больше то придется переходить на платный тариф. Предлагать два варианта: либо он сам заводит этот сервер и оплачивает, либо предлагаю самому этим заниматься за стоимость сервера + дополнительные пару копеек.
    Ответ написан
    2 комментария
  • Где учиться PHP?

    @iAlex195
    Советую почитать PHP 7. В подлиннике Игорь Симдянов, Дмитрий Котеров
    Ответ написан
    6 комментариев
  • Добавление в бд с PDO — ошибка 500, в чем проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А вы уверены, что поля в таблице называются именно `$name` и `$surname`?
    Ответ написан
    4 комментария