Задать вопрос
  • Как сделать localhost безопасным?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Используй docker
    Ответ написан
    Комментировать
  • Какое окружение вы используете для разработки php?

    DevMan
    @DevMan
    phpstorm для основной разработки, любой редактор под руками (vsc, atom, sublime, nano, vim...) для посмотреть/быстрых маленьких правок.

    сервер: все (за редким исключением) ставлю из пакетов, затем допиливаю ручками.

    phpmyadmin/аналоги–для–других–баз последний раз видел году в 2010. с тех пор использую либо консоль, либо гуевые тулзы (для удаленного доступа через ssh/http–тунель).

    докеры, вагранты, "идентичное проду окружение", "сборки – гавно" – это все типичный булшит и базвордс.
    иногда перечисленное реально нужно и полезно (сам пользую где надо), но далеко не всегда/везде и не всем.

    разрабатываете в одиночку – вообще пофигу на чем, лишь бы вас устраивало и было вам удобно.
    разрабатываете в команде – пока ваш код запускается у других участников (что не проблема, если понимать что делаешь/особенности языка под разные платформы/следование принятым соглашениям), всем плевать на чем вы его у себя крутите. хоть стоя в лыжах в гамаке и на утюге.
    Ответ написан
    12 комментариев
  • Плавающая точка пайтон как исправить?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Скобки лишние
    60c3646954a22305449190.png
    Ответ написан
    1 комментарий
  • Как ускорить mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любые вопросы про "ускорение mysql" необходимо сопровождать не голословными заявлениями "Слющай, использует индексы, мамом клянус!", а ВЫВОДОМ EXPLAIN
    Без которого вопрос в принципе не имеет смысла, и должен удаляться.

    Плюс неплохо сразу выкатить результат SHOW ENGINE INNODB STATUS
    Ответ написан
    Комментировать
  • Как безболезненно перейти с Python на Rust?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Python медленный

    Надо сообщить об этом тем, кто на нём высоконагруженные сервисы пишет.

    Python кажется игрушечным языком

    Надо сообщить об этом тем, кто на нём высоконагруженные сервисы пишет.

    Проблемы из-за GIL'а

    Надо сообщить об этом тем, кто на нём высоконагруженные сервисы пишет.
    Ответ написан
    1 комментарий
  • Как безболезненно перейти с Python на Rust?

    Как безболезненно перейти с Python на Rust?

    Учиться, учиться, учиться.
    1) Python медленный

    Питон на удивление быстрый, особенно если использовать PyPy, а сильные тормоза возникают только в особых случаях.
    2) В python нет адекватного управления памятью

    Автоматический GC - это один из самых адекватных способов управления памятью, который только придумывало человечество.
    3) В python мне приходится испльзовать кучу мегабайт библиотек (я чувствую себя тупым и бесполезным при импортировании библеотек)

    А вы импортируйте их с мыслью "я не хочу тратить кучу времени на реализацию этого всего с нуля"
    В расте вам точно также придётся импортировать кучу библиотек, как и в любом другом языке, где есть библиотеки.
    4) Python кажется игрушечным языком

    Зря так думаете. Python очень мощный.
    5) Python не подходит род микроконтроллеры (micropython - просто игрушка)

    Раст+МК для новичков тоже очень страшная вещь - посмотрите на вопросы от товарища eegmak, например, чтобы в этом убедиться.
    Micropython - вполне себе production ready инструмент для тех случаев, когда его хватает, и не нужно ужиматься в очень дешёвые чипы.
    6) Проблемы из-за GIL'а

    С какими именно проблемами вы столкнулись на практике?)
    Скорее всего, их можно решить и менее радикальными методами.

    ИМХО: вы услышали от кого-то что Rust-топ язык, а Python - игрушечный, а настоящие программисты используют ручное управление памятью и сами реализовывают всякие сложные алгоритмы и протоколы.
    Хотя обычно ещё пишут, что настоящие программисты пишут только на C, только в виме, и никогда не ищут ответы на русскоязычных форумах.

    Если я прав - задумайтесь ещё раз, какую именно вашу проблему может решить раст, которую не может решить Python.

    Если я вас не отговорил - берите rustbook (лучше способа не придумали ещё).

    Если хочется перейти на другой язык, не обязательно раст - посмотрите в сторону других языков со сборкой мусора - например C#, Go, или D. Их все можно использовать в том числе и на МК, с разной степенью извращений.
    Ответ написан
  • Как безболезненно перейти с Python на Rust?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Учишь rust -> пишешь на rust.
    Ответ написан
    3 комментария
  • Знак вопроса перед параметром метода это ошибка в PHP?

    @vaajnur
    битриксоид
    Типы для параметров и возвращаемых значений могут быть помечены как обнуляемые путем добавления префикса в виде знака вопроса. Это означает, что указанные параметры и возвращаемые значения, могут быть как указанного типа, так и NULL.

    php.net/manual/ru/migration71.new-features.php
    Ответ написан
    Комментировать
  • Как такое сверстать?

    RAX7
    @RAX7
    Держи, немного поправил один из своих старых набросков.

    Принцип работы примерно, как описал Максим Морев в своем ответе.
    Ответ написан
    2 комментария
  • Насколько актуален чистый PHP?

    php666
    @php666
    PHP-макака
    Отвечу как автор того самого обширного ответа.

    Первое. В голове у тебя тотальное непонимание. Вопрос твой звучит примерно так же, как "можно ли быть хирургом не зная анатомию человека и не закончив 5 лет мед института?". Естественно нет.

    Есть ли сейчас смысл в оттачивании чистого PHP
    Язык всегда первичен. Да.

    Далее. Вот эта фраза
    если мне +- хватает понимания, как работает та же Ларавел?
    Ты серьезно думаешь, что у тебя "хватает понимания", как работает фреймворк? Больше не повторяй вслух эти слова. Никогда. Особенно на собеседовании. Иначе собеседующие тебя похоронят за плинтусом.

    Может, при возможности стоит обратить внимание на другой язык(Го, шарп, нода)?
    Сегодня разговаривал с HR-ом, дословно: php-шников и фронтов много. Больше остальных. Спрос на другие языки - go и питон - там низкая конкуренция. Не могу ей не поверить, т.к. php существует более 20 лет и за это время в отрасль вкатилась куча людей. Откровенно говоря, очень скоро значительный % пхп-макак пойдет в такси, включая меня. Конкуренция, судя по собеседованиям - адовая. Спрашивают сам язык и ещё 250 сопутствующих технологий.

    не рискую пока идти на собеседования потому что хочу закрыть чеклист: несколько проектов в портфолио на чистом PHP, laravel; подучить JS с Аяксом; Добить тестирование, а также чуть разобраться с докером, линуксом и теоретической частью этих ваших интернетов.
    мертвому припарка. Ты никогда в "домашних условиях" не получишь боевой опыт. Лучше иди работай за "ничего", больше пользы будет.
    Ответ написан
    1 комментарий
  • Как проверить есть ли слово в строке?

    @dimoff66
    Кратко о себе: Я есть
    const check = (str, word) => 
      str.split(word).slice(1).some(v => !v || (v[0] >= 'А' && v[0] <= 'Я'))
       
    console.log(check('МоскваПитерВоронеж', 'Питер')) //true
    console.log(check('МоскваПитерВоронеж', 'Пите')) // false
    console.log(check('МоскваПитер-3Воронеж', 'Питер')) // false
    Ответ написан
    3 комментария
  • Насколько правильно натягивать верстку через файлы темы?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Хотел узнать, настолько ли это плохой способ натяжки?

    Вы не поняли всю суть. А суть в том что:

    Вы взяли заказ:
    1. На начальном этапе вы спрашиваете клиента - будет ли он править это шаблон в визуальной составляющей, т.е добавлять новые блоки, меняя что-то координально. Если да, то этому человеку нужен условный конструктор aka page-builder
    Плюсы: быстро разрабатывается, много компонентов из коробки, большинство логики реализовывается через drag-n-drop.
    Минусы: Page Builder откровенный говнокод, который придется оптимизировать.

    2.Если - клиенту нужен сайт где дизайн уже отработан на 100%, либо есть сторонний разраб который допилит шаблон(добавит функционал), acf лучший выбор, потому что всё предсказуемо, отсутствует куча вложенностей, оберток, и вся логика на виду, плюс удобно отлаживать. В нормальных руках - доп функционал добавляется так же быстро как и page-builder, новый шаблон, новые кастомные поля под них.
    Плюсы: клиент вряд ли что-то поломает, так как в acf в ограничиваете его действия, даете ему молоток и гвозди, а не компанию с техникой как в случае с page builder.
    Минусы: клиент не может допилить часть функционала сам, ему потребуются вложения со стороны поддержки и программиста.

    3. Дополнение - WP это уже не глупая блоговая система. С введением Gutenberg - можно сделать свой шаблон внутри обычно страницы, на любой вкус.
    Ваша задача - задать правильные вопросы "клиенту", и перенести это все в ТЗ и код.
    Ответ написан
    1 комментарий
  • Как часто нужна модель MVC?

    Stalker_RED
    @Stalker_RED
    Да, это полезно - написать свой фреймворк и/или CMS.
    Потом полезно сравнить его с laravel или symfony, найти чем ваш фреймворк лучше.
    Если ничем не лучше - можете его смело забросить, и переходить на что-то общеизвестное, и вот почему:

    Представим, что у вас заказали лендинг по заказу насосов, например, и вы сделали его на своем фреймворке. Через 5 лет вы сменили род деятельности, и водите экскурсии по Тасмании. Или вас укусил радиоактивный паук, и теперь вы спасаете мир, а поддержкой сайтов не занимаетесь.

    Сервис с насосами за это время вырос, они теперь еще и бурят скважины, и фильтры устанавливают и колодцы копают, и у них филиалы в 20 городах. Им нужно доработать сайт. И при поиске разработчика выясняется, что сайт ваш доработать невозможно, т.к. документации по фреймворку нет, готовых модулей совместимых нет, интеграций с 1C, google docs, microsoft sharepoint нет, и никогда не будет. И проще переписать с нуля, чем разбираться как оно у вас там устроено.

    А если бы сайт был на общеизвестном фреймворке, то гораздо проще найти и специалистов и найти готовые интеграции.

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

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    8 комментариев
  • Прошу помощи. В каком направлении мне двигаться?

    Tanner
    @Tanner
    Огромный человекоподобный боевой робот
    Для начала, мне непонятно, почему все части вашей программы, которые вполне могут выполняться синхронно, работают в потоках. Есть часть программы, которая выиграла бы от многопоточности − сканирование портов, где логично было бы создать по потоку на каждый порт (если портов слишком много, то создать пул потоков, определить стратегию переиспользования потоков, в общем, тут большой простор для творчества), но у вас порты сканируются в одном потоке, последовательно.

    Но давайте притворимся, что так и надо, и поговорим о других проблемах вашего кода.
    • Не стоит использовать глобальные переменные в программах длиннее одного экрана. Вместо global лучше объявить глобальный объект и спрятать flag в него:
      class PortScanner:
          
          def __init__(self):
              self.flag = 0
              
          def animate_menu_up(self):
              print("\n")
              ...
              self.flag = 1


    • Код инициализации программы тоже лучше перенести в __init__() глобального объекта. И основной цикл вынести в отдельный метод, например, run(). Тогда на нижнем уровне у нас останется что-то вроде:
      import ...
      
      class PortScanner:
          ...
      
      if __name__ == '__main__':
          main_obj = PortScanner()
          main_obj.run()

      этот идиоматичный код позволит импортировать класс PortScanner в другой скрипт, а также обеспечит плюсик на собеседовании/ревью,
    • приучайтесь использовать докстринги вместо комментариев:
      def animate_menu_up():
          """ Создание красивого меню (вверх). """

    • лишний цикл while True: в select_mode(),
    • слишком много магии. По мере роста программы становится всё тяжелее держать и сопоставлять в голове всякие абстрактные значения. Вот литералы, которые, по моему мнению, стоило бы определить как константы − или в «шапке» скрипта, или как атрибуты класса:
      MF_INITIAL = 0
      MF_MENU_CENTER = 1
      MF_MENU_DOWN = 2
      MF_SELECT = 3
      
      SCREEN_WIDTH = 50
      ALL_PORTS = [22, 80, 7777, 2516]
      SOCK_TIMEOUT = 0.5
      ANIM_SYMBOL = '~'
      ANIM_DELAY = 0.02

    • такие вещи очень больно стреляют в ногу и почти гарантированно проваливают собеседования:
      except RuntimeError:
          continue
      если вы действительно хотите продолжить выполнение программы после такой ошибки (что в обычных обстоятельствах бессмысленно и опасно), то позаботьтесь хотя бы о правильной индикации:
      import traceback
      ...
      except RuntimeError:
          traceback.print_exc(file=sys.stdout)
          continue

    • раз уж мы задержались здесь, давайте сделаем диспетчер более идиоматичным:
      while True:
          try:
              {
                  MF_MENU_CENTER: th_three.start,
                  MF_MENU_DOWN: th_two.start,
                  MF_SELECT: select_mode,
              }[flag]()
          except RuntimeError:
              traceback.print_exc(file=sys.stdout)
              continue
      Такой наивный подход выводит много шелухи на экран, но это не важно. Важно то, что такой код проще читать и дорабатывать, чем цепочку if...elif...else.

    • Работа со строками тоже напрашивается на улучшения:
      1. нет смысла разбивать строки на списки, к символам в строке можно обращаться так же, как к элементам списка − по индексу и с помощью срезов,
      2. не нужно копировать строки,
      3. не нужно печатать всю строку с начала, это делает анимацию неровной − конец строки печатается медленнее, чем начало. Достаточно допечатать один символ в строке.
      Например:
      def animate_menu_center():
          """ Создание анимации центрального меню. """
          # настройки для анимации
          output_strings = [
              '[1] scan all ports',
              '[2] scan enter port',
              '[3] exit',
              'SCANNER V1.0',
          ]
      
          # анимация названия
          for output_string in output_strings:
              print('\r\t\t', end='')
              for ch in output_string:
                  print(ch, end='')
                  time.sleep(ANIM_DELAY)
              # last string?
              if output_string != output_strings[-1]:
                  # new line
                  print()
      
          print('', flush=True)
          flag = MF_MENU_DOWN
      (Я убрал цвета для простоты.)
    • юзабилити сильно страдает из-за отсутствия нормальной функции выхода из приложения,
    • не оставляйте закомментированный код в файле, который отдаёте на ревью, это минус. Вместо этого напишите комментарий с пометкой “TODO”, например:
      # TODO: реализовать режим '2' (скан произвольного списка портов)
      Это однозначно плюс − показывает, что вы умеете работать в команде и пользоваться системами контроля версий.

    Вроде бы наиболее серьёзные проблемы я перечислил. Выложу более полный вариант кода в комментариях.
    Ответ написан
    1 комментарий
  • Как из Visual studio code подключиться к локальнымбазам Mysql?

    flapflapjack
    @flapflapjack
    на треть я прав
    вы чуете разницу между MSSQL и MySQL?
    Ответ написан
    1 комментарий
  • Как идеологически правильно делать Lazy Load и делать ли её вообще?

    @hello_my_name_is_dany
    Backend Developer (Node.js, PHP, C#)
    Есть магический метод __get (с двумя нижними подчёркиваниями)
    class Category
    {
        private $children = null;
    
        public function __get($property)
        {
            if ($property === 'children') {
                if ($this->children !== null) return $this->children;
                else {
                    $this->children = $this->getChildren();
                    return $this->children;
                }
            } else {
                throw 'Undefined property';
            }
        }
    
        private function getChildren()
        {
            // TODO: запрос к базе и получение результата
        }
    }
    
    $category = new Category();
    someAction($category->children); // в первый раз будет запрос
    showSubCategories($category->children); // второй и послудеющий раз возьмёт уже из приватного поля

    А к вопросу нужности - зачастую в ORM это настраивается, какие поля брать сразу, а какие лениво. Так что полностью зависит от задачи.
    Ответ написан
    Комментировать
  • Как в foreach, в каждом варианте выводить контент с небольшим отличием?

    @rPman
    Чтобы обратиться к переменной, имя которой в другой переменной, нужно использовать двойной $
    $var1=1;
    $var2=2;
    foreach(['var1','var2'] as $name) echo $$name;
    Ответ написан
    3 комментария
  • Как сделать кнопку лайк для поста React Redux Firebase?

    vmakhnyuk
    @vmakhnyuk
    Frontend developer
    1. Создать компонент лайк
    В Firestore у вас должны храниться посты, желательно, чтобы у постов было поле likes: [...userId], чтобы пользователь не мог лайкать пост бесконечно.

    2. Рендерите компоненты постов. если у поста в likes есть id пользователя, то блокируете кнопку лайка.
    3. в редаксе просто синкаете, like action - если запрос на лайк резолвнулся успехом, обновляете state постов локально.
    Это лишь мое мнение по реализации, комментарии приветствуются
    Ответ написан
    1 комментарий
  • Как сконкатенировать в строку через запятую значения определенных свойств объектов в массиве?

    @TheAthlete
    Perl 5, C, C++, компьютерные сети
    arr.map(item => item.title).join(', ');
    Ответ написан
    Комментировать