• Поможете с функцией PHP?

    @galaxy
    Суперглобальные переменные ($_GET, $_POST и т.д.) потому так и называются, что доступны всегда и из любого места.
    Вы назвали параметр своей функции _POST и таким образом пытаетесь перезатереть суперглобальную переменную. Так делать нельзя.
    Все будет работать, если убрать _POST из параметров (и не передавать его при вызове - он и так отовсюду доступен).
    Ответ написан
    2 комментария
  • Как устроена скорость в играх?

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

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

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    За свою жизнь мне довелось поработать в веб-разработке, автоматизации газопроводов, бухгалтерии, автоматизации бизнеса и даже дизайнером рекламы и журналистом. И останавливаться пробуя новое пока не собираюсь) При этом образование у меня - радиотехника.

    Образование не ограничивает круг возможных профессий, а жизнь иногда складывается так, что приходится заниматься совершенно неожиданными вещами. Выбирайте ту специальность, которая ближе Вам в данный момент, интернет здесь вряд ли подскажет оптимальный выбор, тем более что у каждого здесь свой собственный путь и своя правда - кто-то оканчивает ВУЗ и всю жизнь работает по специальности, а кто-то ищет себя в самых неожиданных областях.
    Ответ написан
    1 комментарий
  • На каком этапе роста проекта приходится использовать Raw запросы?

    DevMan
    @DevMan
    на одних проектах вообще не использую, просто заранее тяжелые выборки загоняю в кэш.
    на других – вообще со старта. ибо много сырых данных, обновляющихся каждый день, а распихивать их по моделям нет ни смысла, ни необходимости (данные только читаются).
    в третьих - там, где не хватает возможностей и надо хитрить.

    в общем: все зависит, универсального ответа нет.

    ну и стоит отдельно определиться, что подразумевается под сырыми запросами: квери-билдер или прямой доступ к базе. последнее я практически не использую.
    Ответ написан
    Комментировать
  • Литература по Linux. Как лучше изучить Linux?

    @pfg21
    ex-турист
    поставить основной системой на ноутбуке. и начать в нем жить.
    теория - теорией, а практика всегда лучше.
    Ответ написан
    5 комментариев
  • Как грамотно организовать структуру сайта (папки и файлы, вложенность)?

    sslion
    @sslion
    Это яркий пример "как делать нельзя", т.е. "так не делают".
    Изучай фреймворки, например laravel, а там уже к тебе придёт понимание о структуре папок...
    Ответ написан
  • Почему окно сразу закрывается?

    includedlibrary
    @includedlibrary
    if (!glfwWindowShouldClose(pWindow))
      {
        isClosed = true;
        glfwTerminate();
        return;
      }


    Если не было события о закрытии окна, то завершить glfw. Почему же окно закрывается?
    Ответ написан
    1 комментарий
  • Можно ли использовать законно неактивированую виндовс 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 комментария