• Как вызвать метод трейта из метода класса с таким же названием, чтобы не было Deprecated предупреждения?

    Назначьте алиас на метод трейта:
    use MyTrait {
        sharedMethod as traitSharedMethod;
    }


    И вызывайте уже его:
    $this->traitSharedMethod();
    Ответ написан
    Комментировать
  • Как игровые движки понимают инородные языки?

    Интерпретатор lua (в случае Love2D и Cocos), и Mono (в случае Unity) можно подключить, как обычную сишную библиотеку.
    В этом случае C++ не нужно "понимать" чужой язык, достаточно лишь понимать, какие сишные функции надо вызывать, чтобы запустить код на "чужом" языке, и как туда передать доступ к функциям движка (это делается, обычно, путём передачи указателей на функции)
    Ответ написан
    Комментировать
  • Что делать если фриланс биржа кинула на деньги?

    @Drno
    Это не биржа. это просто фейковый сайт и развод.
    Можешь обратиться в правоохранительные органы разве что
    Ответ написан
    2 комментария
  • Как написать код, который будет удалять файл с названием поля id из базы данных, если само поле будет отсутствовать?

    @Siverius
    Если вам нужен пошаговый план действий, то примерно так:
    1. получить все id из таблицы save в виде массива
    2. получить все названия файлов в папке сохранений в виде массива
    3. в цикле foreach пройтись по массиву id, искать в массиве названий файлов совпадения.
    если совпадения нет, вызывать метод удаления записи из таблицы по id
    4. в цикле foreach пройтись по массиву названий файлов, искать в массиве id совпадения.
    если опять же совы не падают, вызывать метод удаления файла

    в псевдокоде это будет примерно так:
    class TableDirectoryCleaner
    {
        private array $ids = [];
        private array $filenames = [];
    
        public function doTheBeauty()
        {
            $this->init();
            $this->checkTableAndDeleteRowsWithoutFiles();
            $this->checkFolderAndDeleteFilesWithousRow();
        }
    
        private function init()
        {
            $this->fillIds();
            $this->fillFilenames();
        }
    
        private function fillIds()
        {
            $this->ids = $this->getRepository(Save::class)->findAllIdsAsArray();
        }
    
        private function fillFilenames()
        {
            $this->filenames = $this->someMethodThatGetsFilenamesAsArray();
        }
    
        private function checkTableAndDeleteRowsWithoutFiles()
        {
            foreach ($this->ids as $id) {
                if (!array_search($id, $this->filenames)) {
                    $this->getRepository(Save::class)->deleteRowWithId($id);
                }
            }
        }
    
        private function checkFolderAndDeleteFilesWithousRow()
        {
            foreach ($this->filenames as $filename) {
                if (!array_search($filename, $this->ids)) {
                    unlink($filename);
                }
            }
        }
    }


    PS как, собственно, вам и написал nokimaro
    Ответ написан
    Комментировать
  • 2 роутера через коммутатор/свич?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    Задача понята так: Есть два подключения к Интернету через два независимых роутера, нужно настроить сеть так, чтобы ПК, который подключен в свитч, имел оба выхода как доступные и был доступен из Интернета через оба роутера, где второй нужен для резервной связи. На ПК запущена некая служба (сайт, ssh, неважно), использующая известный порт.

    Делаете так:
    - На свитче создаете два VLAN, скажем с номерами 10 и 20, в один включаете порт с ПК (tagged, порт соответственно в trunk), и порт с роутером (untagged), во второй порт с ПК (tagged) и порт второго роутера (untagged);
    - На ПК настраиваете два виртуальных сетевых адаптера (eth0.1, eth0.2) под оба VLAN, на обоих настраиваете DHCP;
    - На роутерах выдаете известному мак-адресу ПК конкретный статический IP-адрес (лучше из разных подсетей, чтобы при работе с ПК не путаться) и настраиваете проброс требуемого порта на этот IP;
    - На ПК проверяете доступность Интернета через каждую из сетевых карт путем отключения их поочередно (ifdown eth0.2 например, и пингуете 8.8.8.8, потом ifup eth0.2; ifdown eth0.1 и опять пингуете);
    - Настраиваете службу так, чтобы она слушала на 0.0.0.0 или на обоих IP-адресах, выданных роутерами;
    - Настраиваете DynDNS на оба IP-адреса, с которыми ПК выходит в Интернет, для обеспечения доступа снаружи;
    - Проверяете доступ снаружи путем отключения каждого из каналов по очереди и ожидания обновления DynDNS.
    Ответ написан
    2 комментария
  • Почему я не могу объявить аргумент метода типа потомка от аргумента родительского класса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Ковариантность и контравариантность ¶
    Официальная документация

    Если коротко: сужать тип у метода наследника можно для возвращаемого значения, а для аргумента можно расширять. И только так, дабы соблюсти Liskov Substitution Principle. В TypeScript это самая популярная проблема, куда разрабов языка постоянно тыкают носом... тк программы в рантайме падают из-за возможности расширять/сужать как тип параметра, так и возвращаемого значения
    Ответ написан
    Комментировать
  • Существует ли утилита, чтобы запускать несколько версий PHP в Ubuntu (вроде NVM для Node.js)?

    SagePtr
    @SagePtr
    Еда - это святое
    В убунту при установке из ppa:ondrej/php каждая версия PHP ставится отдельно и имеет отдельный экзешник по пути наподобие /usr/bin/php8.1
    При этом также создаётся симлинк /usr/bin/php, который можно переключить через update-alternatives --config php
    Ответ написан
    2 комментария
  • Как нейросеть научить понимать текст?

    Vindicar
    @Vindicar
    RTFM!
    Коротко: никак.

    Ты можешь попытаться классифицировать тексты по тематике, используя ключевые слова, и искать те тексты / фрагменты, которые содержат те же ключевые слова, что и заданный вопрос.
    Но даже такое определение содержит кучу проблем.
    1. Слова могут иметь разные словоформы. Нужен стемминг для выделения корней слов.
    2. Какие слова считаются ключевыми? Нужен как минимум частотный анализ слов. Слова с очень высокой частотой будут менее полезны при работе.
    3. Порядок слов может менять смысл вопроса. Значит, придётся использовать рекуррентные (seq2seq) сети.
    4. Нужно понять, как кодировать подаваемые на вход ключевые слова. Неудачное кодирование может сильно ограничить возможности сети.

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

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

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Самый адекватный вариант - тупо спросите "можно воспроизвести звук?". Уверен что 99,9% пользователей не будут рады левым непрошенным звукам на сайте, через что бы они там не выводились...
    Ответ написан
    Комментировать
  • Как эффективно хранить canvas попискельно в БД с последующим отображением?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну как минимум за $table->string('color', 18); надо руки сразу отрывать
    То есть на координатах наэкономили, 4 байта в сумме, а потом хоба - в 4 раза больше на несчастный цвет. при том что цветов там явно не больше десятка. И это не говоря уже про нормализацию.

    По уму надо придумать простой бинарный протокол, который получает поток байт выравненными кусками
    2 байта х
    2 байта у
    1 байт цвет
    4 байта юзер (и нечего жадничать, никаких BigInteger. половины населения земного шара вполне хватит)
    то есть всего 9 байт.
    а не под сотню, как сейчас - ещё и завернутое в скобочки/кавычечки джейсона

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

    По пагинации это дурь какая-то. Зачем "офсет-лимиты" если уже есть четкая разбивка.
    Кто мешает запрашивать тупо построчно? Скажем, по 100 строк картинки? 10 запросов по мегабайту.
    id в этой таблице по сути вообще не нужно, только если лара без него не сможет. Но по уму первичный ключ - это ху.

    Из БД получать 2 лимона строк конечно тоже не сахар
    Но можно наверное увеличить строки, хотя бы виртуально.
    Вью или процедура, которая комбинирует скажем сто строк в одну

    Насчет других хранилищ я не уверен. Там же наверняка нужна будет выборка обновлений, по таймстампу.
    Но в целом с Редисом поэкспериментировать можно.
    Ответ написан
    1 комментарий
  • API это прослойка между интерфейсом и базой данных?

    @Akela_wolf
    Extreme Programmer
    Вообще говоря нет. API - это внешний интерфейс, предоставляемый какой-либо системой. Под словом "интерфейс" я здесь подразумеваю не пользовательский интерфейс, а технических интерфейс. В качестве такого интерфейса может выступать REST, SOAP, RPC и т.д. Также это может применяться к библиотекам и модулям программы. Вообще термин API имеет очень широкое значение и к базе данных имеет только то отношение, что у БД тоже есть API (например ODBC/JDBC).
    Ответ написан
    Комментировать
  • Как правильно логировать базу данных?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Если честно, то не совсем понятно чего вы хотите.
    В БД есть логирование. Вот, например PostgreSQL

    Если речь идет о логах hibernate & jpa, то вот, полезная статья:
    https://www.baeldung.com/sql-logging-spring-boot
    Можно установить уровень логирования, а затем например, вывести логи в файл

    Если речь про Spring & Hibernate (про аудирование), например, когда какая сущность была добавлена или обновлена, то есть например, EntityListeners.

    Вот, простой пример:
    @SpringBootApplication
    @EnableJpaAuditing
    public class Application {
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    }


    сущность User -
    @Entity
    @EntityListeners(AuditingEntityListener.class)
    @Table(name = "users")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        private Long id;
    
        @CreatedDate
        @Column(updatable = false)
        private LocalDateTime created;
    
        @LastModifiedDate
        private LocalDateTime lastModified;
    
    }
    Ответ написан
    2 комментария
  • Возможно ли устроиться программистом с общим образованием?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нельзя устроиться с таким уровнем поисковых навыков. Этот вопрос здесь задавался уже сотники раз.
    Ответ написан
    3 комментария
  • Стоит ли вкладываться в красный диплом?

    Jacen11
    @Jacen11
    каждый раз когда я с кем то вспоминаю универ, я почти обязательно говорю, что у меня красный диплом, а у тебя нет и ты лалка. На этом его плюсы закончились(

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

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

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

    Уже начиная от сюда - создана криптовалюта (и не одна, но имеет смысл только биткоин, почему - ниже), в которой с помощью блокчейна и надежного PoW консенсуса, создана 'амбарная книга' где записываются транзакции буквально 'кто кому сколько перевел монет' и все могут доверять этим записям при условии ограничений консенсуса (в случае с PoW это атака 50%+1 и возможность подобрать такое количество подтверждений от циркулирующих сумм, при котором этой атакой можно пренебречь)

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

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

    Сначала создавались криптовалюты, как копирующие bitcoin так и реализация с нуля с необычным функционалом и концепцией, эксперименты с альтернативными консенсусами и прочим,.. которые показали что самого по себе консенсуса недостаточно для обеспечения надежного функционирования системы, нужны еще такие вещи как качественное первоначальное распределение ценности (монет блокчейна, если грубо) и наличие независимых разработчиков, более чем одна команда, грамотное управление и воля участников к поддержанию системы на плаву. Требование про разработчиков очень философское и есть куча примеров когда вне зависимости от консенсуса, главные разработчики, владельцы основного объема ценностей были связаны/созависимы, и были способны уничтожить полезный проект (например что произошло с bitshares, если что это показало на сколько PoS консенсус уязвим).

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

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

    Вся околофилософская мишура, которой пичкают неофитов - это полный бред, который не выдерживает простейшего логического анализа. Главная цель основной массы криптопроектов в криптоэкономике - отъем денег у населения. Основной способ заработка на NFT это либо комиссионные сборы (этим занимаются централизованные площадки, продвигающие NFT проекты авторов, т.е. маркетинг) либо симуляция торговли, когда автор покупает сам у себя свой же товар - показывая фейковую заинтересованность им (ничего нового не изобрели и этим давно занимаются и до смартконтрактов как биржи так и сами авторы криптопроектов). И конечно отмывка денег, буквально - обеление серых финансов, когда ценность генерируется из ничего, это просто повод показать что деньги получены с продажи вот этих произведений искусств, что давно используется в большом мире денег,.. ничего нового.

    p.s. почему только bitcoin? потому что только в нем распределение богатств заметно равномерный (индекс джини), только его консенсус подкреплен огромными финансовыми вливаниями в оборудование для майнинга (очень дорогая атака) и огромное комьюнити независимых разработчиков (правда тут есть куча мест для слабости проекта, но по сравнению с другими - bitcoin выглядит как самый защищенный).
    Остальные проекты создаются не с целью привнести что либо полезное миру, а с целью собрать денег, либо как сбор средств на разработку (ICO или комиссия в блокчейне), а когда консенсус основывается буквально на объеме денег (чистый PoS), то сам факт того что основные деньги проекта сосредоточены у кого то одного (создателя или олигополии инвесторов как это сделано в EOS, точнее dPoS проектах) полностью обнуляет любую защиту.

    p.p.s. меня заинтересовал единственный альтернативный консенсус - proof of identity (сейчас это idena.io - примерно 2к-3к нод, 7к..14к 'майнеров' и количество растет ~10% в месяц , для молодого слабого проекта это чудо в криптоэкономике), основная беда большинства не PoW - возможность атаки количеством нод или деньгами, но тут одна идентити = один человек (ну ок, две - это норма), это гарантирует консенсус, а опасность сбора фермы рабов для атаки на проект усложняется низкой стоимостью монеты, т.е. как это не парадоксально, пока доходы майнеров тут будут низкими - консенсус будет надежным

    т.е. создавать проекты на основе блокчейна с консенсусом PoI - надежно, но вот ставить проект в финансовую зависимость от его монеты - уже опасно.

    хех, надо бы это оформить в виде статьи на хабр и отправлять народ туда
    Ответ написан
    3 комментария
  • Как понять блокчейн?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    в чем его преимущества

    Ни в чем. Просто модная хайповая тема. Так же как "облака". Поначалу пытались впихнуть как всегда невпихуемое, кто-то поднял бабла, кто-то прогорел, после того как хайп прошел и стала ясна область применения - сидят тихо и не жужжат, потому что область применения оказалась очень узкой и весьма специфичной...
    Ответ написан
    4 комментария
  • Получить значение переменной по имени из массива $$foo[1] изменился приоритет операций. Где почитать из-за чего это произошло?

    DevMan
    @DevMan
    явное лучше неявного.
    поэтому $$foo[1] -> ${$foo[1]}

    Для того чтобы использовать переменные переменных с массивами, вы должны решить проблему двусмысленности. То есть, если вы напишете $$a[1], обработчику необходимо знать, хотите ли вы использовать $a[1] в качестве переменной, либо вам нужна как переменная $$a, а затем её индекс [1]. Синтаксис для разрешения этой двусмысленности таков: ${$a[1]} для первого случая и ${$a}[1] для второго.
    https://www.php.net/manual/ru/language.variables.v...

    произошло в какой–то из седьмых версий.
    Ответ написан
    Комментировать
  • Как защититься от таких инъекций или как они называются?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тег <script> не имеет ни малейшего отношения к mysql.
    Наличие этого тега в базе данных никакой инъекцией не является.

    "Инъекция" будет только если этот тег будет выведен внутри HTML кода как есть. Называется XSS
    "Инъекция" которая относится к mysql называется SQL инъекция, и чаще всего позволяет прочитать из БД любые данные. Скорее всего является неактуальной для данного сайта, поскольку там просто нечего читать.

    Чтобы защититься от XSS, надо использовать htmlspecialchars() при выводе данных в HTML
    Чтобы защититься от SQL инъекций, надо использовать для работы с БД подготовленные выражения
    Чтобы не "совали" всякий мусор, надо использовать защиту от спама, например капчу.
    Ответ написан
    Комментировать
  • Парсер JSON на PHP или Python?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    JSON не надо парсить, это стандартизированный формат, для чтения которого есть библиотеки на почти каждом языке. Нужно просто читать. Это самая элементарная вещь, не требующая вообще ума.
    Ответ написан
    3 комментария
  • Как изучить и понять математику для ML девятикласснику?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Есть два варианта:
    1. Объявить себя вундеркиндом, найти свой уникальный путь изучения математики - но мы вам тут не советчики, вы уж сами как-нибудь

    2. С прискорбием начать повторять тот тернистый путь, который проходят выпускники физмата - именно,

    Нормально выучить матанализ, чтобы понимать все эти производные, интегралы, ряды и прочий бедлам - и решать с их помощью физические и геометрические прикладные задачи
    g7ierv6dkziz4mvrmj2i7w-pgyw.png
    Нормально выучить линейную алгебру, чтобы не смотреть на произведение матриц как на новые ворота, а понимать, что это и зачем это. Опять же, решать геометрические задачи и помнить, что все эти нейроны - это просто извращенное название для скалярного произведения многомерных векторов.

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

    Комбинаторика, статистика, теория вероятностей могут быть выучены основательно только при наличии базы из матана и линала.

    Как нетрудно заметить, перечисленные мной дисциплины идут ровно в том порядке, в каком их изучают студенты любого приличного физмата (попавшие туда после 11 классов) - просто потому, что это, блин, логичный порядок изучения, с опорой на ранее полученные знания.

    Итого, для нормального (осознанного) ориентирования в ML нужно иметь знания студента 2 курса любого физмата (даже пединститута городского вам хватит). Если вы хотите аналогичный результат в девятом классе (и главное, быыыыстра!!!!), начинать нужно было в пятом.
    Ответ написан
    Комментировать