Задать вопрос
  • Какую видеокарту выбрать на древний ПК?

    Adler_lug
    @Adler_lug
    Нечего там улучшать. Выкинуть все в мусорку и купить новое...
    Ответ написан
    Комментировать
  • Как лучше хранить журнал в долгосрочной перспективе?

    Stalker_RED
    @Stalker_RED
    По сути три больших направления с кучей мелких ответвлений
    1. хранить текстовый лог в отдельном файле/сервисе/логохранилище
    2. хранить лог действий юзеров в отдельной таблице (встречал один проект, где лог действий был в десятки раз больше, чем сами данные, ага).
    3. хранить в той-же таблице предыдущие записи. То есть при редактировании INSERT, а не UPDATE, при этом автоматически проставляется время и автор, а при выборке просто берете последнюю по времени версию.

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

    Особняком стоит упомянуть системы с возможностью одновременного редактирования несколькики пользователями, которые автоматически разруливают коллизии. Самый знакомый всем пример - google docs. Но это довольно сложно в реализации.

    С учетом "использоваться будет, я надеюсь редко" я бы остановился на текстовом логе. Отдельный лог на каждую запись, можно архивировать старые, можно logrotate натравить.
    Ответ написан
    1 комментарий
  • Как избавиться от кучи хлама в выводе sudo apt update (какие-то 404, игноры и пр.)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Есть ли какой-то простой способ, чтобы не вникать во всю эту муть
    Конечно есть - нанять специалиста.
    Ответ написан
    8 комментариев
  • Как НЕ фиксировать транзакцию после отработки php скрипта?

    Stalker_RED
    @Stalker_RED
    Непонятно что именно вы таким образом делаете, но в целом похоже на довольно распространенные случаи типа "незавершенная регистрация" или "неоплаченная корзина с покупками", "недописанный и неопубликованный пост" например.
    Если эти данные вам не особо нужны можно вместо БД использовать какое-то другое хранилище - сессию или даже localStorage на клиенте.
    Если нужны, лучше писать все-таки в базу, ставить пометку о том, что это незавершенная история, или устанавливать время жизни, чтобы потом по расписанию удалить просроченные.

    Про сажаю/не сажаю вообще непонятно о чем речь.
    Ответ написан
    5 комментариев
  • Как вывести любую часть древовидного списка?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Для реализации этой задачи хорошо подходит хранение в виде Nested Set. Хранение в виде Adjacency List подразумевает рекурсию и полную выборку.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    It depends.
    Если у вас регистрация на сессиях, то можно просто задать время жизни сессии.
    Если на JWT, то соответствующее время жизни токена обновления.
    Если какой-то свой нестандартный вариант, то при запросе проверять время с момента последнего запроса.
    Ответ написан
    8 комментариев
  • Какой хороший ресурс чтобы изучить шаблоны проектирования ООП и все нюансы?

    refactoring.guru - один из наиболее качественных, если говорить о паттернах GoF.
    Ещё книга из серии Head First по паттернам достаточно легко читается.

    Но где применять в реальных задачах - это, в основном, только на практике.
    Ответ написан
    43 комментария
  • Как запустить выполнение кода на серверной стороне по истечении определённого времени?

    Adamos
    @Adamos
    1. Если эти итоги должны только отображаться.
    На той странице, которая будет отображать эти итоги, проверять, подведены ли они и не пора ли.
    Чтобы не случилось так, что страница открыта снова раньше, чем подведены итоги - блокировка.
    2. Если сразу при подведении должны быть выполнены некоторые действия
    Вешать на крон.
    Ответ написан
    3 комментария
  • Как создать тег на хабр Q & A?

    0xD34F
    @0xD34F
    Открываете форму обратной связи. В выпадающем списке "тема" выбираете пункт "гениальная идея". В текстовом поле "текст сообщения" излагаете суть - что за тэг, и почему его следует добавить. Подсказка: "почему следует добавить" - это, как минимум, наличие уже существующих вопросов, к которым новый тэг можно будет прицепить, и, наверное, не в количестве 3-5-10 штук, а побольше. Так что прежде чем предлагать добавление тэга, стоит воспользоваться поиском - убедитесь, что оно того стоит.
    Ответ написан
    Комментировать
  • Как при запросе к ссылке на FOREIGN KEY получить имя пользователя а не id?

    @alexalexes
    https://www.w3schools.com/sql/sql_join.asp
    В вашем случае Orders это artist,
    Customers это track,
    Customers.CustomerName - это ваш искомый artistname.
    В джоине участвуют атрибуты:
    ON Orders.CustomerID=Customers.CustomerID
    а у вас будут:
    ON artist.artistid=track.trackartist
    Ответ написан
    Комментировать
  • Как извлечь данные из привязанной таблицы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JOIN
    Ответ написан
    Комментировать
  • Как узнать, для какого процессора предназначен файл?

    bingo347
    @bingo347
    Crazy on performance...
    readelf -h /home/usr/qt-android/mylib.so
    Ответ написан
    Комментировать
  • Какие навыки требуются Junior программисту микроконтроллеров?

    @dima20155
    you don't choose c++. It chooses you
    1. Прежде всего, нужно знание схемотехники, но в вашем случае этот этап можно вычеркнуть.
    2. Естественно, знание основ С и С++ (синтаксиса, базовых конструкций). Советую вам использовать в своих проектах С++, поскольку зачастую вы сможете писать в стиле С без каких-либо проблем, а при необходимости воспользоваться фичами/библиотеками для С++.
    3. Навыки hardware и software отладки. Здесь просто нужна практика с любимой IDE.
    4. Понимание указателей, типов памяти (статическая, динамическая, автоматическая, регистровая). Как память выделяяется и прочее.
    5. Знание базовых структур данных. Это немного скользкий пункт, поскольку С++ предоставляет хорошую (хотя и весьма минималистичную) стандартную библиотеку STL, в которой есть большинство из необходимых структур данных, но они используют довольно много дополнительной аллокации памяти, поэтому если пишете под что-то 8битное, то имейте это ввиду.
    6. Знание git на базовом уровне сейчас важно для джуна любой IT специализации.
    7. Неплохо бы иметь базовое представление о том как устроен микроконтроллер и его архитектура.
    8. Неплохо бы понимать RTOS (FreeRTOS - классика жанра), а главное зачем он нужен, а когда он не нужен или вреден.
    9. Лично мне всегда в работе пригождается python, но это всегда сторонние задачи/автоматизация.

    P.S. Нашел ещё вот такой RoadMap.
    P.S.S. Получилось довольно объемно. Но пункты 2-5 по сути можно объединить в один. Все это можно изучить написав парочку проектов для классической STM32 + HAL.
    P.S.S.S. Сам начинал как hardware разработчик. Путь embedded разработчика начального уровня не был сложным для меня и занял не очень много времени.
    Ответ написан
    Комментировать
  • Почему доступен не весь объем SSD на linux?

    SagePtr
    @SagePtr
    Еда - это святое
    Часть зарезервирована пользователю root, недоступная другим пользователям, через tune2fs можно изменить.
    Ответ написан
    2 комментария
  • Почему вылезает ошибка tuple index out of range?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Потому что fetchone возвращает кортеж колонок выборки. Выбираете вы одну колонку - vig, соответственно, это кортеж из одного элемента. Вы же пытаетесь обратиться к 4-у, что и вызывает ошибку.
    Ответ написан
    1 комментарий
  • Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    --WHERE val = 'e59253548ffcb090ecc0cd0944afd27f'
    ++HAVING val = 'e59253548ffcb090ecc0cd0944afd27f'
    Ответ написан
    Комментировать
  • Могу я задать вопрос по коду, как мегаджун JS?

    @collapsoid
    1. Лишние манипуляции над домом.
    appendChild нужно делать только после того, как элемент и все его дети будут настроены. Т.е. если в функции showMessage сначала настроить messageWrapper (задать класс; добавить в него message) и только потом сделать document.body.appendChild, то можно выиграть в производительности за счет меньшего количества обращений к DOM-дереву.

    Эти строки вызывают вопрос, т.к. не очень понятно, зачем нужно добавлять элементу класс и через 100 миллисекунд его убирать. Выглядит, как что-то ненужное
    messageWrapper.classList.add("messageWrapperUnvis");
    setTimeout(() => {
      messageWrapper.classList.remove("messageWrapperUnvis");
    }, 100);


    2. Ивент листенеры нужно удалять за собой.
    Нужно убирать отратобавшие event listeners, т.к. их накопление приводит к утечке памяти.
    Также желательно пересмотреть подход к определению слушателей вообще, т.к. в функции modalWindow на каждое событие contextmenu устанавливается другое событие contextmenu, назначение которого только лишь в том, чтобы удалить предыдущий currentDiv. Имеет смысл вынести currentDiv в функцию modalWindow, а внутри слушателя делать необходимую проверку.

    3. Нерациональный ранний выход из функции.
    В функции modalWindow нет смысла создавать элементы, кроме wrapper, т.к. при срабатывании условия e.target.matches("#input") произойдет return и ранее созданные элементы просто окажутся бесполезными. Т.е. if нужно разместить непосредственно после wrapper.

    4. Бесполезные элементы.
    Функцию addNewItem я бы вообще переделал, т.к. внутри нее на каждый keypress производится куча действий над элементами, которые в итоге так и не попадут на страницу: nListItem и remove будут добавлены только при e.key === "Enter" && input.value !== "" (кстати, нет смысла плодить вложенные if'ы, когда можно использовать булевы выражения).

    В общем, уделяй внимание каждой отдельной сущности, которую ты создаешь; помни о ее назначении и о том, как она будет взаимодействовать с другими сущностями на странице. Это поможет избежать ненужных операций и в конечном итоге сделает код чище.

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

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    1) Плохой код, который выполняет задачу, лучше чем отсутствие кода
    2) Перед работой составьте примерный план, например: "сначала получаем данные, потом с ними делаем это или это, потом выводим..." Это помогает не лепить откровенную фигню по ходу дела и не переписывать все по 10 раз.
    3) Смысл рассматривать простыню из кода новичка отсутствует, так как это похоже на оценку походки будущей фотомодели по первым шагам в ходунках. Никто не пишет хороший код сразу, учиться и писать много - лучший путь обучения.
    4) Смотрите на чужие готовые решения, думайте как использовать интересные приемы, именно свои выводы и ошибки делают вас программистом+, а не гов*окодером. Задатки и желание у вас есть, значит все получится.
    Ответ написан
    Комментировать