Задать вопрос
  • Динамический/Статический внешний адрес?

    @Vitsliputsli
    1) Внешний адрес у всех устройств подключенных к одному роутеру одинаковый или разный?

    Скорее всего одинаковый. Т.к. под роутером обычно понимают домашние маршрутизаторы, выполняющие роль NAT, как раз чтобы экономить ip-адреса в первую очередь.

    2)Как узнать внешний адрес статический или динамический?

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

    @Vitsliputsli
    Стандартно, gitflow. К примеру так: разработка ведется в отдельных ветках feature, для интеграции сливаются в dev, на основе dev создается release и после тестирования заливается в master, который и выкладвается в прод.
    Разные токены это относится к окружению, в коде этого быть не должно. Окружение собирается сборщиком деплоя, например в Jenkins.
    Ответ написан
    Комментировать
  • Как парсить сайта IKEA?

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

    @Vitsliputsli
    Как удобно, так и храните. Брокер сообщений предлагают, потому что, это универсальный вариант, гарантирующий доставку (если, конечно, не в памяти он будет хранить).
    Если данные уже лежат в классический СУБД, то есть резон там же организовать очередь и забирать из нее, не вводя дополнительный инструмент.
    Т.к. инсертим батчами, то разумеется нужно делать инсерт из файла, это будет эффективнее. Т.е. готовите файл, и через какой-либо промежуток времени заливаете его. И, разумеется, только после заливки помечаете записи как обработанные.
    Наверное, можно писать даже прямо в файл для заливки, если архитектура позволяет, главное проработать момент, когда начинаем писать в новый файл, чтобы записи не попали в старый, когда началась процедура заливки в ClickHouse.
    Но, при этом остается момент: ваш заливщик умер, когда уже получил подтверждение от Clickhouse, что все записалось, но не успел зафиксировать это в очереди. Соответственно это нужно проверять.
    Если у вас не только insert, но и update, то нужно усложнять архитектуру (заодно и решится выше указанная проблема), нужно удалять предыдущие записи для обновляемых.
    Ответ написан
    Комментировать
  • Сколько iptables потребляет озу?

    @Vitsliputsli
    Нисколько не потребляет, когда не работает, а работает она только когда вы меняете через нее правила. Всегда потребляет ресурсы встроенный файервол netfilter, а сколько, зависит от кол-ва правил, их сложности и подключенных модулей.
    Туннели могут какие угодно разные, что в софте реализуете, хоть http через icmp.
    Ответ написан
    Комментировать
  • Хороша ли архитектура моего кода? Информация цепляется по API?

    @Vitsliputsli
    Все public, все доступно извне, нет сокрытия.
    Прям сам объект куда-то лезет по api, забирает данные, которые сам и предоставляет, обрабатывает ответ, явное нарушение SRP.
    Ответ написан
    Комментировать
  • Какой стэк использовать для быстрого доступа данных?

    @Vitsliputsli
    Оптимизация это всегда жертва чем-то, ради чего-то. Нельзя просто оптимизировать, нужно выбрать, что улучшать, а затем выбираеть решения, понимая, чем можно пожертвовать. Поэтому начинать оптимизацию нужно тогда, когда знаешь какую проблему решаешь.
    Нельзя просто поставить прослойку перед MySQL и все станет хорошо, MySQL итак, очень быстрая СУБД. Но можно поставить, например кеширующий Redis, при условии, что у вас очень много key-value значений и крайне важен быстрый доступ к ним. Это решение не только увеличит занимаемое место и усложнит архитектуру, нужно будет контролировать консистентность баз данных, которая может быть нарушена из-за проблемы инвалидации кеша.
    Оптимизация классических СУБД всегда начинается с построения наиболее подходящих индексов. Если этого уже не хватает и скорость чтения недостаточна, то можно ввести репликацию slave и читать из нее. Здесь опять возникнет вопрос дополнительных затрат на место и консистентности, особенно неконсистентности данных из-за лага репликации. Плюс затраты на дополнительное подключение, что впрочем можно решить внедрением proxy.
    Далее более сложные варианты, от отказа от foreign keys, до шардирования. Но все это при действительно высоких нагрузках, заниматься этим на данном этапе не стоит, разве что, если есть предпосылки, что к этому придете, то заранее выбрать параметр шардирования (иногда это просто, а бывает очень сложно).
    Ответ написан
    Комментировать
  • Народ, как использовать редис на 2 проекта?

    @Vitsliputsli
    Использовать разные базы данных внутри одного Редиса.
    Если, конечно, настройки Редиса подходят для обоих проектов.
    Ответ написан
    Комментировать
  • Что быстрее поиск по файлу JSON в PHP или в базе посредством MySQL?

    @Vitsliputsli
    Если это обычный вопрос, что лучше, то храните в БД. Если реально пытаетесь выиграть несколько миллисекунд, то положите это все в redis.
    В принципе, хранение в массиве php скорее всего тоже будет достаточно быстрым, при условии использования php-fpm и без json.
    Если нужен поиск подстроки в строке, то на таких объемах тоже вполне быстро будет работать. На больших придется рассматривать, что-то вроде Elastic, т.к. СУБД это делают плохо, а MySQL очень плохо.
    Ответ написан
    Комментировать
  • Как правильно сделать типизацию объектов?

    @Vitsliputsli
    Вы можете воспользоваться контравариантностью (php>=7.4), т.е. указать в абстрактном классе родительский класс для User:
    abstract protected function mapToArray(Model $object ): array;
    
    ...
    
    class User extends Model

    Либо ввести DTO, чтобы mapper брал данные из него и вообще никак не обращался к бизнесовым сущностям.
    Ответ написан
    6 комментариев
  • Есть ли смысл использовать Git?

    @Vitsliputsli
    Можно. Но, например, когда проект начнет работать вам понадобится добавить новую фичу, а следовательно у вас появится 2 версии и нужно будет их как-то легко разделять. Пока вы будете делать эту новую фичу, нужно будет сделать еще одну побыстрее, уже 3 версии. Можно наделать отдельные директории и переключаться между ними, использовать внешние утилиты сравнения, а можно использовать git.
    Когда через год понадобится разобраться, а зачем так было сделано, можно найти коммит, в рамках которого было внесено изменение и понять зачем. Еще лучше, если коммиты связаны с тасками в системе управления проектом.
    Когда наскучит вручную таскать код на сервер. Когда устанешь копировать файлики между версиями для переноса функционала. Когда все сломал, и понимаешь, что легко бы нашел причину, если бы фиксировал предыдущее стабильное состояние. И это только то, что первое приходит в голову.
    Ответ написан
    Комментировать
  • Как избежать аномалии неповторяющегося и фантомного чтения при Read Commited?

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

    @Vitsliputsli
    "Боюсь вас разочаровать, но это не так. Я могу написать ссылку вида site/?page=2 и отправить её через POST. Так что скажите нам какие есть еще отличия?".

    Вы не найдете правильный ответ. Если бы собеседующий хотел проверить ваши знания, он бы уточнял вопрос, показывая о чем конкретно он хочет спросить. Но больше похоже на игру "я вот знаю, а ты нет". Нормальный человек обычно объяснит, что он имел ввиду.
    Потому что, на такое замечание можно ответить только, что сделать можно что угодно, можно хоть вместо метода GET использовать метод в виде неприличного слова. А если его будут знать и клиент и сервер, то все будет отлично работать.
    Поэтому это вопрос больше про договоренности, а если вопрошающий заявляет что ему пофиг на них, то угадать что для него важно, а что нет - очень сложно.
    Например, avivasyuta вспомнил еще один интересный момент - кеширование браузером. Кто знает, может быть имелось ввиду оно, но и это ведь тоже договоренности.
    Ответ написан
    6 комментариев
  • Пакеты и репозиторий в linux?

    @Vitsliputsli
    Ко всему написанному добавлю:
    Почему я с Debian могу скачать приложение из репозиториев opensuse?но почему не могу с Aur?

    Зачастую в дистрибутивах есть механизмы обеспечивающие миграцию из одной пакетной системы в другую (наверное поэтому можете установить пакеты из OpenSuse). Что касается Aur, то это скрипты сборки, а не пакеты, и там может быть что угодно, начиная со сборки из исходников, заканчивая сборкой из какого-нибудь deb пакета.
    Ответ написан
  • Как в регулярных выражениях php заменить только символ?

    @Vitsliputsli
    Зачем здесь регулярка?
    str_replace(['*','x'],'R','2*10*30 2x10x30');

    Регулярка будет выглядить так: /\*|x/

    Если же, замена нужно только для конструкций из 3 чисел соединенных * или x, то можно написать так:
    preg_filter('/(\d+)[*x](\d+)[*x](\d+)/', '${1}R${2}R${3}', '2*10*30 2x10x30')
    Ответ написан
    2 комментария
  • Почему не используют NoSql решения на каждого пользователя?

    @Vitsliputsli
    У вас здесь 2 вопроса:
    1) какую СУБД использовать, это полностью зависит от данных и как к ним планируется обращаться.
    2) вы прям сразу хотите запилить шардирование, это вполне возможно на любой СУБД.

    В шардировании основная проблема это когда нужно получить данные из многих шардов. Сперва проблема выбрать критерий шардирования, вы вроде бы его выбрали и у вас все легко делится по пользователям. Но остается момент формирования статистики и аналитики: вам нужно будет обращаться ко всем шардам, забирать из них данные и делать map-reduce. Очевидно, что ваше ПО должно позволять параллельно формировать запросы и обрабатывать их. А вот, миграции - это не проблема, наоборот чем меньше шарды, тем проще их делать.
    Разумеется, у вас должна быть отлаженная полностью автоматизированная система деплоя, которая позволит накатывать те же миграции параллельно на множество шардов. Вам нужно будет создать систему map-reduce, а здесь уже интереснее, если вы будете оперировать малым кол-вом данных, то нет проблем, в противном случае вам придется подымать отдельную аналитическую СУБД и загружать в нее данные. Таскать по сети миллионы строк между разными машинами будет не весело.
    И еще момент, не обязательно создавать на каждого пользователя отдельный шард, вы можете объединять их по какой-либо формуле, тогда не обязательно заводить миллионы шардов. Либо все же сделать миллионы шардов, но располгать скажем на 1 машине 1000 шардов, и вы сможете если понадобится изменять эту цифру.

    Как все делают когда не умещаются данные на одном сервере? Применяют горизонтальное масштабирование.
    Что если запросов очень много? Добавляют балансировщик.
    А что если данных в БД полно? Делают репликацию. И вот тут вопрос.

    Нет проблем уместить много данных на одном сервере (есть, конечно, BigData но это совсем про другое), проблема в том что при увеличении кол-ва данных в БД начинается деградация производительности СУБД, и примерно к 1млрд строк она проседает очень сильно (если кончено у вас строка это не 5 integer, а скорость ответа вы считаете в миллисекундах, а не в секундах). И в этом случае мы делим данные на разные СУБД, т.е. шардируемся.
    Если очень много запросов чтение, то нет проблем поставить нужное кол-во слейвов и делить нагрузку между ними, т.е. реплицировать master.

    Ну и, шардирование не такая простая вещь как кажется. Не стоит прям на старте ее впиливать, а вот подготовить данные для возможного деления на шарды стоит.
    Ответ написан
    Комментировать
  • Стоит ли vim усилий?

    @Vitsliputsli
    Vim - это текстовый редактор в первую очередь. Если же говорить про разработку, то в ней не нужно писать очень быстро очень много текста. А если вдруг, у вас так, то вы делаете что-то не то. Кодинг в разработке только одна из стадий и не самая длительная.
    То что vim присутствует практически везде вообще не аргумент, vim без плагинов совсем не ide.
    Тем не менее, попробуйте установить его как ide для вашего языка. Тогда выяснится, что нужно повеселиться с плагинами. Что обвес всем этим невелирует маленький быстрый редактор, и что скорость работы плагинов в разы тормознутей специализированного ide. Кто-то напишет, что я не те плагины брал, но устанавливать неофит будет так же, сделать это одной кнопкой не получится. Если цель не работать, а настраивать, то это отличный выбор.
    Есть деньги на нормальную ide, то выбор очевиден, если нет, то все равно нужно 10 раз подумать.
    Ответ написан
    1 комментарий
  • Ошибка в functions.php. syntax error, unexpected ';' in functions.php on line 1. Как исправить?

    @Vitsliputsli
    Соответственно постоянно выводилась ошибка из-за того что почему-то html код был в php файле в таком виде, может у кого есть догадки как до такого дошло.

    Без понятия как вы до этого дошли и не хочу гадать, что вы пробовали и что не получилось - приводите код. Серьезно, что вы ожидаете задав вопрос: "я поудалял на мой взгляд лишнее и теперь ничего не работает".
    Что касается представленного кода, он выдаст ошибку unexpected '<' на 2 строке, потому что в php нет синтаксической конструкции < html>. Не представляю как можно ошибиться здесь при удалении html, поэтому приводите код.
    Ответ написан
    Комментировать
  • Что отвечать на вопрос, зачем\почему обновил резюме?

    @Vitsliputsli
    Не хотите, чтобы работодатель увидел резюме - создавайте его без указания имени и точного названия компании.
    Хоть работодатель и пытается читать мысли, но не всегда успешно, поэтому вполне ожидает, что работник сперва обратиться к нему, если чего-то не хватает. Если работодатель "обиделся", что вы обновили резюме, то не стоит переживать о таком работодателе. Хоть это и не идеальное поведение со стороны работника, но я практически не видел случаев, когда прежде чем уволить кому-то давали четкие условия, что нужно что-то улучшить и т.п.
    В плане, что сказать сейчас - есть такая замечательная вещь, как мониторинг рынка. Специалист должен понимать, что потребно на рынке труда именно сейчас, а что нет. Ну и разумеется, что и сколько стоит. Это нормально, ведь если годами "вариться" в одной компании, то выйдя на рынок можно обнаружить, что твои навыки никому не нужны вовсе.
    Ответ написан
    Комментировать
  • Нужно ли иметь вышку в it для руководящих должностях?

    @Vitsliputsli
    Все зависит от компании.
    Знаю нескольких с общим средним образованием, работавших тимлидами на крупную компанию, предоставляющую аутсорсинговые услуги крупнейшим банкам, страховым компаниям, почтовым службам и т. п. Компания экономила на сотрудниках, поэтому разработчиков набирали в бедных, среднего размера городах, и их профессиональный уровень был невысок.
    В крупных городах не встречал, хотя и разговор об образовании заходит редко.
    Ответ написан
    Комментировать