Задать вопрос
  • Можно ли использовать законно неактивированую виндовс 10?

    ettaluni
    @ettaluni
    ERROR MEME
    Ну есть же лицензионное соглашение ты его читал когда принимал?
    Вы имеете право использовать данное программное обеспечение, только если у вас имеется соответствующая лицензия и программное обеспечение было должным образом активировано с использованием подлинного ключа продукта или другим разрешенным способом
    Ответ написан
    3 комментария
  • Пропал меню «Пуск» в Linux Mint 20.04. Как вернуть?

    DamianLewis
    @DamianLewis Автор вопроса
    В общем, проблему решил. Теперь по порядку.
    Причина проблемы? Кратко: Wine.
    Подробнее: В моем случае это был CrossOver. Дело в том, что при изменении/удалении/отключении видимости НЕКОТОРЫХ Windows ярлыков в бутылке, а конкретно в настройке "Редактировать меню" бутылки, происходит обновлении файлов конфигураций содержащих информацию о ярлыках в меню пуск. Один чел из забугра пишет, что Wine для построения имен для ярлыков(и не только) использует кодировку ANSI вместо нужного нам UTF-8 и в результате может случится так, что в конфигурацию меню будет занесено не читаемое название. В народе их еще называют крякобрязы. Решил проверить лог через Looking Glass и там действительно при запуске аплета menu@cinnamom.org была ошибка UTF-8 при чтении файла, но не было написано какого именно файла. Первый файл пришедший в голову, это конечно же cinnamon-applications.menu расположенный в /home/USER/.config/menus и это верно. Там действительно было строка с крякобрязами в разделе Menu. Переименовал просто в Menu. Проблема с кодировкой решилась и в логах ошибка UTF-8 больше не высвечивалась. Но основную проблему исчезновения меню она не решила и пришлось пробовать все подряд попутно в поисках информации в сети.

    Выполнил целый комплекс мер. Перечислю какие. После каждого пункта я делал перезапуск Cinnamon на всякий случай. Просто нажимаю на CTRL+ALT+Backspace
    1. В домашнем каталоге удалить файл ~/.config/menus/cinnamon-applications.menu
    Судя по отзывам, в 50% случаях это помогает.
    2. Полная очистка папки ~/.config/menus/
    Поможет в 70% случаях
    3. Сброс настроек Cinnamon. Правая кнопка мышки на панели > Устранить неполадки > Сбросить все настройки. Поможет в 75% случаях.
    4. Переименовать папки menus и dconf например в menus2 и в dconf2 и быстро сделать перезапуск Cinnamon нажав на CTRL+ALT+Backspace. Поможет в 80% случаях.

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

    Теперь подходим к тому, как в моем случае решилась данная проблема. Проблемные ярылки Windows в CrossOver которые я удалял, на самом деле не удалились и именно они не давали запускаться аплету меню. Находятся эти ярылки в домашней директории ~/.local/share/applications/ выберите и удалите оттуда ярлыки которые вы хотели убрать через CrossOver.
    Ответ написан
    Комментировать
  • Что может а что не может содержать миграция?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Нормальная миграция подразумевает следующие характеристики:
    • идемпотентность - будучи запущена, серия миграций приводит к одинаковому результату
    • обратимость - любой шаг миграции можно откатить с откатом версии приложения
    • целостность - миграция переводит приложение из рабочего состояния в рабочее (баги не в счет)

    Естественное применение миграций - это CI/CD. Т.е. в большинстве случаев ожидается минимальный простой приложения во время деплоя, именно поэтому миграции в большинстве своем изменяют структуры данных.
    Но это совсем не означает того, что данные не могут быть изменены. Часто так бывает, что некоторые системные справочники требуют обновления или же данные пользователей требуют изменений. Например - для имени и фамилии использовалось одно поле, а теперь оно делится на два, как положено. Миграция данных в данном случае естественный и необходимый процесс, который может занять значительное время. Поэтому используется запланированный процесс выкатки приложения с его аннонсированием для пользователей. Запланированный даунтайм стандартная практика больших и сложных приложений, которые могут это себе позволить.
    Если ваше приложение не может себе позволить остановку обслуживания пользователей, то для таких случаев пишется вспомогательный код, который делает обработку случаев немигрированных данных и вообще всевозможные костыли, лишь бы оно работало (основной источник гемора).

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

    Итак, мои ответы по вашим вопросам (как бы делал я):
    1. Добавил бы миграции с внесением/удалением 2 новых столбцов. Первый для email, второй email_verified. После развертывания запустил бы скрипт верификации почты (ох нескорый и ненадежный этот процесс). По-хорошему, по первому логину просил бы проверить и верифицировать email путем отправки кода на него. Думаю, вы уже поняли, что мы попадаем в серую область того, что машинная проверка здесь неуместна. Но допустим, мы использовали машинную верификацию, все проверили, все нужно сделали. В следующей версии мы удаляем столбец email_verified.
    2. Как правило, такие вещи данные в БД не изменяют, а значит нет необходимости в миграциях, достаточно скрипта. Но, если вы ок с простоем приложения, то можно вполне внести данный скрипт в миграцию, а также не забыть об откате этой миграции (удалять новые размеры, к примеру).

    Как мы все видим, миграцию можно рассматривать, как в контексте СУБД, так и в контексте приложения в целом.
    Общепринятая практика - рассматривать миграцию в контексте баз данных. Все остальное - скрипты и костыли в самом приложении.

    Универсального рецепта нет. Все завязано на бизнес-логику и реализацию кода приложения. Если нельзя отделить сложную обработку данных от процесса деплоя, то эту логику следует встраивать в код миграций. Пример такой обработки - получение какого-нибудь системного идентификатора, который используется при работе приложения, например ротация API ключей при смене системы аутентификации.
    Ответ написан
    2 комментария
  • Как разметить память на ubuntu 16.04?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если нужно расширить раздел на диске то обычно делается так:
    сначала нужно узнать какой диск и какой на нём раздел нужно расширить
    какой диск можно глянуть командой
    lsblk
    допустим это будет диск /dev/sda
    по занимаемому разделами месту можно глянуть
    занято
    sfdisk -l /dev/sda
    свободно
    sfdisk -F /dev/sda
    или просто воспользоваться cfdisk которая покажет всё в псевдо-графическом режиме
    cfdisk /dev/sda
    пусть это будет второй раздел (/dev/sda2) на диске который нужно расширить до конца диска
    если раздел /dev/sda2 примонтирован то его нужно размонтировать:
    umount /dev/sda2

    далее идут два этапа
    1) изменить таблицу разделов(ТР) диска указав нужный размер для разделов
    2) изменить сам размер файловой системы(ФС) для данного раздела

    1.
    на всякий случай сохраним дамп ТР чтобы в случае чего можно было восстановить
    sfdisk --dump /dev/sda > sda.dump
    потом если нужно будет восстановить
    sudo sfdisk /dev/sda < sda.dump
    кстати --dump генерирует простой человеко-читаемый формат
    теперь в ТР указываем новые границы для раздела /dev/sda2
    echo ", +" | sudo sfdisk -N 2 /dev/sda
    где -N 2 это второй раздел, ", +" == "начало, размер" раздела, а + это сокращенная запись указывающая на размер который нужно задать по умолчанию, это максимально возможный размер, то есть если после второго раздела идёт пустое пространство вплоть до конца диска то sfdisk растянет раздел до конца диска ну или до начала следующего раздела если он там будет.
    проверяем ТР на возможные ошибки
    sfdisk -V /dev/sda
    вместо вышеописанных манипуляций с sfdisk можно воспользоваться всё той же псевдографической утилитой сfdisk, там довольно просто можно разобраться как изменить ТР (см. [Resize])

    2.
    теперь нужно растянуть ФС до размеров указанных в ТР
    для начала удостоверимся что с ФС всё в порядке
    e2fsck -f /dev/sda2
    далее идёт само расширение
    sudo resize2fs /dev/sda2
    данная команда расширяет ФС раздела /dev/sda2 до границ указанных в ТР
    ну и напоследок еще раз проверим
    e2fsck -f /dev/sda2
    Ответ написан
    Комментировать
  • Хорошие курсы по бд(возможно платные)?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Курсы бесполезны, они приносят пользу только их авторам. Читайте учебники и документацию вашей СУБД.
    Ответ написан
    2 комментария
  • Как писать на с++ на el capitan?

    DevMan
    @DevMan
    https://www.jetbrains.com/clion/

    хотя писать можно в любом редакторе.
    Ответ написан
    Комментировать
  • Как запустить программу / команду в Linux, не выводя её на экран?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Ну, во первых, консольный режим программы не всегда есть у программы и всегда можно посмотреть в Терминале, в help программы есть ли он, по наличию соответствующих операндов управления.
    Если список операндов очень короток и только информативный, то всё обо всём говорит.

    Вызов help-а может по разному осуществляется...
    programma --help
    programma -help
    programma -H
    programma ?


    Например так в Терминале выглядит help Nautilus:

    $ nautilus --help
    Использование:
      org.gnome.Nautilus [ПАРАМЕТР…] [URI…]
    
    Параметры справки:
      -h, --help                 Показать параметры справки
      --help-all                 Показать все параметры справки
      --help-gapplication        Показать параметры GApplication
      --help-gtk                 Показать параметры GTK+
    
    Параметры приложения:
      -c, --check                Выполнить быструю самопроверку.
      --version                  Показать версию программы.
      -w, --new-window           Всегда открывать новое окно, если указывается адрес URI
      -q, --quit                 Завершить Nautilus.
      -s, --select               Выбрать указанный URI в родительской папке.
      --display=ДИСПЛЕЙ          Используемый X-дисплей

    Вывод показывает, что у nautilus по факту нет консольного режима.

    А если вывести help, например qBittorrent, то мы увидим уже набор комманд, говорящие нам, что он может работать в консольном режиме:
    $ qbittorrent --help
    Использование:
        qbittorrent [options] [(<filename> | <url>)...]
    Настройки:
        -v | --version             Отображать версию программы и выход
        -h | --help                Показать эту справку и выйти
        --webui-port=<порт>        Изменить порт веб-интерфейса
        --no-splash                Отключить заставку при запуске
        --profile=<папка>          Хранить файлы настроек в <папке>
        --configuration=<имя>      Хранить файлы настроек в папках
                                   qBittorrent_<имя>
        --relative-fastresume      Взломать файлы libtorrent для быстрого
                                   возобновления и сделать пути файлов
                                   относительными к каталогу профиля
        --portable                 Короткая команда для --profile=<exe dir>/profile
                                   --relative-fastresume
        файлы или ссылки           Загружать торренты, обозначенные пользователем
    
    Параметры добавления новых торрентов:
        --save-path=<путь>         Путь сохранения торрентов
        --add-paused=<true|false>  Добавлять торренты запущенными или
                                   остановленными
        --skip-hash-check          Пропустить проверку хеша
        --category=<имя>           Назначать категории торрентам. Если категория не
                                   существует, она будет создана.
        --sequential               Загружать файлы последовательно
        --first-and-last           Загружать с первой и последней части
        --skip-dialog=<true|false> Управление показом окна «Добавить новый торрент»
                                   при добавлении торрента.
    
    Значения параметров могут передаваться через переменные среды. Для опции с
    названием «parameter-name» переменная среды — «QBT_PARAMETER_NAME» (в верхнем
    регистре, «-» заменяется на «_»). Чтобы передать значения флага, установите для
    переменной значение «1» или «TRUE». Например, чтобы отключить заставку:
    QBT_NO_SPLASH=1 qbittorrent
    Параметры командной приоритетнее чем переменные среды


    Если вы устанавливали программу из бинарника, часто путь к help-у надо указывать полный, например:
    $ hls-proxy -help
    hls-proxy: команда не найдена

    Ошибка!

    А если мы пропишем путь полный, то уже будет вывод help-а, говорящий нам, как собсно управлять из консоли данной программой:
    $ /opt/hls/hls-proxy -help
    Available command line parameters:
    	-config-path <config directory path>
    		This parameter allows to run several instances of proxy with different configurations
    	-port <http port>
    		Assigns a http port for proxy
    		This parameter overrides setting of config files
    	-address <address>
    		Sets allowed ip interface
    		This parameter overrides setting of config files
    	-pass <admin password>
    		Sets admin password
    		This parameter overrides setting of config files
    	-save
    		Allows to save a http port, address and password values to config
    	-quit
    		Dont start, quit after config save
    Ответ написан
    Комментировать
  • Как правильно формировать структуру сайта?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Должен быть базовый layout (где есть блоки со статичным контентом) и файлы динамических блоков, которые его расширяют - так придется единожды менять футер/хедер/меню и по потребности - страницы с контентом. Это очень удобно реализовано в шаблонизаторах вроде blade и twig (они на 80% похожи)
    Ответ написан
    1 комментарий
  • Не верная разметка разделов Linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    да просто в консоль зайдите и выполните
    ; echo -e "label:dos\nstart=1M,bootable" | sudo sfdisk /dev/sdX

    создаст таблицу разделов dos (ака mbr) и один раздел на весь диск с отступом от начала диска в 1 метр
    где /dev/sdX (X может быть a,b,c...) это ваш диск куда ставите, какие диски в системе глянуть можно командой
    ; lsblk
    не заморачивайтесь с разделами если не понимаете для чего они вам нужны, swap можно потом закинуть в файл, а хомяку и в корне живется неплохо
    Ответ написан
    1 комментарий
  • Какие недорогие mysql хостинги есть для тестирования проектов?

    @rPman
    Тестировать - дома на своей виртуалке.

    google: lowendstock
    cheap budget vps
    Ответ написан
    Комментировать
  • XORG, XFCE, LightDM. Что же это все-таки такое?

    vaut
    @vaut
    Полное понятное объяснение содержит описание всего стека технологий отрисовки приложения на экран и тянет на хорошую книгу, краткий же ответ легко получить в гугле.
    Ответ написан
    Комментировать
  • Как научиться объяснять?

    @dmshar
    Есть волшебный метод, который называется "декомпозиция". Мои наблюдения говорят, что 80% людей им просто не владеют. От слова - вообще. Ни в профессиональной, ни в обыдиной жизни. Но вот те, кто объясняют доходчиво - владеют им виртуозно.
    Заключается он в следующем. Если надо что-то объяснить, и это что-то чуть сложнее таблицы умножения (но и ее кстати тоже), задачу можно всегда разбить на части, из которых компонуется готовое решение. Вы должны на первой "итерации" объяснить ответ "с птичьего полета", как последовательностей этих самых подзадач, без углубления в детали, без подробных выкладок, что называется - "на пальцах". Причем, конечно, на языке понятном и воспринимаемом партнером. Когда (и если) он поймет вашу идею, поймет шаги - начинаете углубляться в объяснение конкретных подзадач. Вот тут уже начинаете использовать меньше "его" терминов, больше "своих". В какой-то момент он начинает сам понимать и самостоятельно додумывать решения. Тогда переходите к следующей подзадаче. Конечно, каждую подзадачу часто можно (а иногда - для очень сложных задач - и нужно) декомпозировать дальше. И так до того момента, когда вы можете объяснить полностью.
    Тогда вы и сами понимаете "roadmap" вашего объяснения, не теряете нить рассуждений и не сбиваетесь, и партнеру легче выстраивать "цепочку понимания", следя за ходом объяснения и сразу понимая, где именно он перестал улавливать мысль. Разумеется, при этом очень важно, что-бы собеседник был заинтересован в том, что-бы получить от вас объяснение, а не просто спросил чтобы "а поговорить".
    Ответ написан
    3 комментария
  • Определение оператора сотовой связи и региона по номеру мобильного телефона, как сделать?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Этих сайтов ещё только ленивый не делал )) 100500 штук уже.
    А вам с такой постановкой вопроса путь на фриланс.
    Ответ написан
    2 комментария
  • Как перевести строку бинарного файла в UTF8?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Не то вы делаете.
    Ответы сервера нужно корректно обрабатывать
    <html><body><h1>Whitelabel Error Page</h1><p>This application has no configured error view, so you are seeing this as a fallback.</p><div id='created'>Sat Apr 03 11:31:28 UTC 2021</div><div>[bfc6dfaa-25344] There was an unexpected error (type=Internal Server Error, status=500).</div><div></div></body></html>

    Смотрите как декодировать это все, и смотрите на заголовки сервера, компрессия может быть не только gzip
    https://developer.mozilla.org/ru/docs/Web/HTTP/Hea...

    https://stackoverflow.com/questions/5929994/c-deco...
    Ответ написан
    Комментировать
  • Нормальная ли сложность задачи для джуниора на работе?

    verkhoturov
    @verkhoturov
    Frontend Developer
    Задача по описанию не кажется какой-то космической, но, возможно, мы не знаем всех нюансов.
    Как бы там ни было, прежде чем говорить, что ты что-то можешь или нет сначала проверни такой алгоритм:

    1. Составь план работы.
    Очень примерно:
    1) Поднять новый проект на Next js
    2) Перенести страницы со старого проекта
    ...
    n) Задеплоить новый проект

    2. Выбери из списка что тебе вообще непонятно как делать и начинай гуглить, задавать вопросы на qna и, главное, сделай что-то на практике.

    3. Если после пункта 2 все еще непоняно, бери все свои нароботки и иди к лиду\старшему разработчику с просьбой помочь (ты джун, это нормально). Главное приходи не с пустыми руками, а хоть с какой-то проделанной работой. Если общаетесь очно, конспектируй.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Если вы пишете POSIX-совместимый шелл, то можете просто подключить bash-completion или посмотреть как он организован.
    А так - автодополнение делается не по определенному списку, а по том, что есть в директориях, перечисленных в переменной PATH
    Ответ написан
    Комментировать
  • Как сократить время выполнения SQL запроса?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Сконвертировать поле meta_value в integer и проиндексировать
    Ответ написан
    3 комментария
  • В mysql для быстрого поиска по дате лучше использовать timestamp как int или как date (datetime)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для скорости абсолютно без разницы, а для хранения даты и времени надо использовать предназначенные для этого типы данных
    Ответ написан
    6 комментариев
  • Есть ли отличие в pdf файлах, если они отсканированы различными способами (скан с автоподатчика и скан вручную по 1 листу)?

    @antonwx
    Никакой разницы нет. Драйвер получает картинку и направляет её в сканирующую программу. Сканирующая программа даже не знает, откуда этот файл был получен, не говоря уж о способе его сканирования. Файл, скорее всего, либо слишком большой и на сайте кривой вывод ошибок, либо сохранен так, что система его не может распарсить. Попробуйте так: откройте pdf файл, выберите печать и затем microsoft print to pdf. Затем пробуйте загрузить новый файл, как правило такой метод должен решить подобные проблемы.
    Ответ написан
    3 комментария
  • Какой самый эффективный способ контроля времени и внимания в рабочее время?

    Сам постоянно отвлекаюсь на тостер, так что для меня актуально.

    Раз отвлекаешься, значит другие занятия для тебя интереснее, чем работа.
    Я вот такую методику выработал и пару дней с ней успешно работаю:
    1. Вырубаем вообще всё, что можно. Уведомления и все отвлекающие сайты.
    Телефон убираем подальше и на беззвучный режим.
    2. Рабочее место чистим от всего мусора.
    Кроме мониторов, мыши и клавиатуры на столе ничего быть не должно.
    3. Блокируем все сайты, которые отвлекают.
    4. Заводим распорядок дня. И придерживаемся его. В него нужно внести сон и работу. Добавить приёмы пищи и всё прочее. Пустоту заполняем чем-нибудь типа "посмотреть youtube", "почитать хабр", "поиграть в доту"
    5. Убираем рутину по возможности. Все инструменты должны настроены так, чтобы не пришлось воевать с IDE
    6. Добавляем разнообразие.
    Например мне очень сложно даются всякие задачи на фикс багов.
    Теперь, когда я нахожу причину бага, я разбиваю её на несколько небольших задач и пишу на каждую тест.
    Каждый такой тест становится для меня промежуточной точкой, и благодаря достаточно мелкой разбивке - мозг не начинает "скучать" и постоянно видит, что происходит какое-то продвижение.

    Заставлять себя я не советую, тк со временем вы так начнёте ненавидеть свою работу и перегорите.
    Ответ написан
    1 комментарий