• Почему при попытке удаления файла из fileList по индексу удаляются так же все остальные файлы?

    @zkrvndm
    Софт для автоматизации
    Тип FileList нельзя редактировать, после создания он неизменяем. Максимум, можно создать новый FileList используя некоторые файлы из старого и то это будет считать грязным хаком и так не принято делать.

    Допустим если в переменных file1 и file2 лежат единичные файлы, то объединить их в FileList можно так:
    var dt  = new DataTransfer(); // Создадим объект для работы с drag and drop
    
    dt.items.add(file1); // Добавим первый файл
    dt.items.add(file2); // Добавим второй файл
    
    var file_list = dt.files; // Извлечем FileList
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    Но повторюсь, так лучше не делать. Правильная практика здесь это в принципе не пытаться редактировать тип FileList, а создать свой обработчик файлов. Само поле input использовать чисто для получения файла, но не для отображения и хранения! Логику для отображения пишем отдельно.
    Ответ написан
    6 комментариев
  • В чем минусы событийно ориентированного подхода?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не претендую на правду. Просто несколько мыслей.

    В чем минусы событийно ориентированного подхода?
    Насколько я понимаю, Алан Кей (тот кто придумал термин Объекто-ориентированный) старался придерживаться именно этого подхода. т.е. кто-то отправляет сообщение, а объекты в системе на него реагируют, каждый по-своему.
    По сути у нас есть message bus, в который добавляется сообщение, а объекты системы слушают этот самый message bus.

    Мысль первая. Наследие.

    Когда мы говорим о наследии Алана Кея - надо просто глянуть что он создал практически.
    А создал он язык Smalltalk. Поэтому логично изучать минусы событийного подхода на
    примере софта который написан с использованием Smalltalk. Кто из коллег в топике
    знает примеры такого софта? Я - к сожалению не знаю.

    По ссылкам википедии https://en.wikipedia.org/wiki/Smalltalk можно видеть в категории
    influenced мы просто видим что Smalltalk
    влиял на Java, Go, Swift. Но я здесь не согласен потому что мы не можем измерить глубину
    этого влияния. Это все равно что сказать что Сталин влиял на Черчилля. Как влиял? На 10%?
    Или более чем половину? Сложно. Насчет Java я тут сказал-бы что сомнительно. ООП? Может быть.
    Акторы? Нет. В Java изначально нет акторов. Они существуют позже в виде фреймворков но
    языком не поддерживаются.

    По поводу MessageBus. Если брать технологию акторов которая используется в Erlang.
    то там скорее не message bus а очереди сообщений между потоками-акторами.
    Если про Smalltalk сказать нечего то про Erlang я могу сказать что на нем написаны
    две единицы софта такие как RabbitMq (очень надежная и неубиваемая система MQ).
    Может не супер-производительная. И CouchDb которая выделяется своей
    устойчивостью ко всяким сетевым сбоям. Реклама говорит что Кауч работает
    практически при мигающей сети, при обрывах и т.п. лучше чем аналогичый TCP-IP совт.

    Мысль вторая. Что Кей говорил про ООП.

    У меня есть цитатник. Я туда собираю некоторые слова на лытни. И иногда слова Кнута, Дейкстры
    и прочих it-академиков. Вот из цитатника Кея:

    I made up the term "object-oriented," and I can tell you
    I did not have C++ in mind.

    Что в этой прямой речи можно понять. Что господин Кей открещивается от современного ООП.
    А фактически все современное ООП зеркалит то что есть в С++. Здесь вы можете со мной спорить
    о первенстве (я не буду спорить я не знаю). Но абсолютно очевиден факт что мир пошел по пути
    жесткой синхронщины в 80х. И пока все еще идет. Будут ли примитивные типы int/double обьектами
    не суть важно. Тут важно что Кей постулирует среду в которой двигаются сообщения. Как сеть в миниатюре.
    А классическое ООП С++ - лишает нас этой среды и заменяет ее вызовом метода. Никакого сообщения
    в С++ нет и быть не может потому что сообщение НЕ существует в отрыве от основного потока который
    инициировал вычисления. Умрет поток - развалится весь стек и параметры и все. В противоположность
    в языке Erlang поток (процесс) приёмник может дохнуть много раз но стек сохраняет свою живучесть
    просто повторяя вычисления заново. И здесь мне кажется и идет развилка путей.

    И здесь как-раз мы может говорить о недостатках. Очевидно что у нас появляется лаг приемки-передачи
    сообщения. У нас появляются мягкие гарантии времени обработки. И многое другое.

    Интересно почему в 80х Алан Кей проигрывал. Я думаю что победил прагматизм. В те далекие 80-е
    комьютеры были еще слабыми. Частота мерялась сотнями килогерц и мегагерцами. И в расчетах
    каждый такт был важен. И красивые и академические языки такие как Lisp, Prolog, Smalltalk
    просто проигрывали языку С в силу оверинжинеринга. А поскольку С++ был вначале действительно
    ООП-надстройкой над С - то он предлагал и ООП-подход и скорость портабельного ассемблера.
    И хотя я лично не люблю С++ (я считаю его перегруженным техническими долгами прошлого)
    я признаю что бизнес выбирая С++ выбирал просто скорость вычислений. Академизм и красивые
    доказательства правоты программ были тогда не нужны. Нужно чтоб банковское приложение
    быстро считало кредиты и выдавало зарплаты и пенсии.

    Сегодня, когда мы нежемся в сладкой неге мощных процессоров и даже (!) облаков - мы можем
    себе позволить любого уровня парадигмы и абстракции. Цена 1 абстракции стала настолько дешево
    стоить что нам дешевле в банках запускать Java/Net приложения и на ходу фиксить ошибки
    чем долго разрабатывать на С++ и иметь неопредленнное поведение и тяжелый анализ
    в случае падения. Даже такой уродец как Python взлетел как язык интеграции а не разработки.

    Мысль третья. Нестандартные и асинхронные архитектуры реализованные в железе.

    Недавно смотрел анонс нового процессора от Чака Мура (это тот самый Мур который создал закон имени себя).
    Мне кажется это пример той самой асинхронной клетки о которой мечтал Алан Кей.

    Мысль четвертая. На кого похож Алан Кей?

    Не знаю как вам. :) А мне он уж очень напоминает Боливара Траска из Люди Икс Дни Минувшего будущего.

    Мысль 5. Что делает Алан Кей на фото?

    Бренчит на музыкальных инструментах. Наверное блюз. Блюз потерянных архитектур :)
    Ответ написан
    Комментировать
  • Стоит ли разработчикам платить за баги?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не платите. Тогда все разработчики просто уйдут туда, где платят. А вы останетесь изучать теорию, объясняющую почему и как появляются баги, пока не осознаете их неизбежность.
    Ответ написан
    1 комментарий
  • Заказывать CMS с 0 или использовать существующие?

    @mletov
    Составляете список того, что должно быть в проекте. А лучше не просто список, а написать полноценное техническое задание.

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

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer

    создать переменные до вызова функции, а в самой функции присваивать значения?


    Это скорее всего будет работать в вашем случае, но вообще подход в корне не правильный.

    Что вам мешает получать те же данные прямо в обработчике клика?

    function takeInfo() {
     let x = 0;
     let y = 1;
     let z = 2;
     return { x, y, z }
    }
    
    document.querySelector('.but').onclick = function() {
      let {x, y, z} = takeInfo();
      console.log(x, y, z)
    }
    Ответ написан
    1 комментарий
  • Как обезопасить такой get запрос?

    @AlexVWill
    Пойми следующую простую логику: JS это код выполняемый на клиенте. Т.е. по большому счету все, что делает JS - делается полностью на совести клиента, в открытую, и клиент может полностью рулить процессом. Тем более, что у тебя данные не через POST передаются, а через GET (хотя большой разницы в данном случае нет), т.е. полностью открытым образом, поэтому пользователь может в строке браузера поставить что угодно. Поэтому, если ты хочешь что-то защитить, т.е. генерировать какой то код - переноси его генерацию на сервер. Ну или делай двухфакторную модель, т.е. часть генерится на сервере, часть на клиенте, и без сопоставления с серверною частью на сервере клиентская часть смысла не имеет.
    Ответ написан
    Комментировать
  • Как найти минимальное значение в строках матрицы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Почти правильно решили.
    В коде надо четко понимать, что есть что.

    Math.min() возвращает минимальное значение среди переданных ему.
    Т.е. надо в скобки Math.min() положить несколько значений, из которых он выберет одно, минимальное.

    В задании просят найти минимальное в каждой строке. Значит, в Math.min() надо передать все значения из очередной строки.

    Обычно Math.min() принимает варианты через запятую: Math.min(1, 3, 5), но у нас каждая строка это массив вроде [1, 3, 5] Массив удобно «распаковать» с помощью трёх точек ... (так называемый оператор расширения). Есть очередная строка в массиве arr – передать её в Math.min(...arr) – вернёт минимальное значение.

    Сейчас внешний цикл for() перебирает у вас как раз строки двумерного массива. То, что надо.
    Вложенный цикл уже и не нужен.

    P. S. минимальное значение можно искать и перебором, со вторым, вложенным циклом for() как у вас. Это длиннее, но тоже работает, особенно на больших объёмах данных. В таком варианте надо бы убрать Math.min() в конце.

    В каждой итерации инициализировать s не в 0, а в константу Number.POSITIVE_INFINITY – больше её точно ничего не будет, все значения окажутся меньше. А дальше сравнивать текущее значение s с очередным числом из строки. И если очередное оказалось меньше — переназначать s это значение, очередной найденный минимум.

    spoiler
    document.write(
      mass.map(row => Math.min(...row)).join(', ')
    ); // 2, 4, 7
    Ответ написан
    Комментировать
  • Откуда берутся функции play и pause у элемента video?

    Natebash
    @Natebash
    React, Vue, Angular, Navite JS, Python / Node JS
    https://developer.mozilla.org/en-US/docs/Web/API/H...

    Это стандартные апи методы для управления медиаконтентом. В доке все описано.
    Ответ написан
    1 комментарий
  • Как правильно находить готовые коды, плагины на разных языках?

    Ответ на ваше уточнение.
    а соединять куски программ или целеком в зависимости от ТЗ уже кем то написаные?

    На сегодняшний день это и есть основная работа большинства разработчиков. Они берут "куски программ", т.е. сложные, отлично написанные библиотеки, и соединяют их в зависимости от ТЗ. Если задача типовая - под неё уже наверняка кто-то написал или пишет библиотеку (вот такие программисты ленивые и изобретательные), если задача НЕтиповая, т.е. её решение нужно и ценно только ВАМ - ну тогда логично, что за вас её никто ещё не успел написать. Огромное количество задач в разработке ПО уже решено с помощью библиотек. По сути в каждом новом проекте вы пишете лишь небольшой кусочек кода, который решает именно вашу задачу. ОСОБЕННО это касается всяких стартапов и PoC, которые по сути и есть склеивание библиотек плюс небольшой кусочек бизнес-логики для демонстрации идеи.

    я думаю должно быть достаточно много хорошего кода... в открытом доступе.

    Ну да, его много. Это всё - библиотеки.

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

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

    Существует много готовых кодов, частей программ или целиком

    Вам нужно понять, что фрагмент готового кода, особенно если он достаточно крупный (не 10 строк, а, допустим, 10 тысяч строк) ценен тогда, когда у него есть хорошо описанный интерфейс (API) и хорошо поставленные требования к нему, который этот код выполняет. Это всё и есть часть определения понятия "библиотека".
    А если у вас в распоряжении трёхстраничный gist на гитхабе, то фиг вы его куда прикрутите, пока не разберётесь, что там написано. А с учётом того, что идеально этот кусок кода всё равно вам не подойдёт, то ещё и выяснится, что проще с нуля написать.
    Ответ написан
    1 комментарий
  • Как понять что делает данный код php?

    v3shin
    @v3shin
    Веб-шаман
    Навскидку код развернулся в
    <?php
    $OO000O0000 = file(preg_replace("@\(.*\(.*$@", "", __FILE__));
    if (preg_replace("@\(.*\(.*$@", "", __FILE__) == __FILE__ or preg_replace("@\(.*\(.*$@", "", __LINE__) != 3)
        die("<tt>ERROR");
    function OOOO0000O0($a, $b)
    {
        if ($b == 162) {
            $d = substr($a, 1303, 8);
        } elseif ($b == 13) {
            $d = substr($a, 973, 330);
        } elseif ($b == 40) {
            $d = trim(substr($a, 1311));
        }
        return $d;
    }
    eval(base64_decode(OOOO0000O0($OO000O0000[0],13)));
    eval(OOOO0OOO0O(OOOO0000O0($OO000O0000[0],40),OOOO0000O0($OO000O0000[0],162),$OO000O0000));
    __halt_compiler();
    [binary]

    Дальше, как я понял, скрипт вырезает, декодирует и выполняет куски из [binary], туда я не лез. В общем, можете покопаться, но ЗАПУСКАТЬ НЕ СОВЕТУЮ.
    Ответ написан
    Комментировать
  • С чего начать системному администратору в школе?

    paran0id
    @paran0id
    Умный, но ленивый
    Системному администратору всегда нужно начинать с инвентаризации
    Ответ написан
    Комментировать
  • С чего начать системному администратору в школе?

    @Drno
    1. - беги оттуда... работы дохера, денег нифига
    А по теме -

    надо создать "карту" сети, где будут ПК которым нужен доступ, спланировать прокладку сети.
    далее можно поделить участки на "квадраты", чтобы приводить туда 1 кабель и ставить свитч, а не вести кучу проводов до каждого ПК
    после этих подсчетов возвращайтесь - будем подбирать оборудование
    Ответ написан
    10 комментариев
  • Как убрать дубли в запросе sql?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Этот вопрос на тостере уже во множестве вариантов с решениями.
    Вторую пару не нужно создавать: T2.value > T1.value
    Ответ написан
    Комментировать
  • Как сменить формат большому количеству файлов?

    @stavfz
    Открываем командную строку например написав в поиске меню пуск cmd
    переходим в нужную нам директорию с помощью команды
    cd C:\НАША_ПАПКА
    Нажимаем Enter
    если вы уверенны что находитесь там где нужно вводим следующую колманду
    rename *.bin *.exe
    ну и как бы всё
    Ответ написан
    1 комментарий
  • Как сменить формат большому количеству файлов?

    @alexalexes
    1. Открыть командную строку.
    2. С помощью команд смены диска, смены каталога выбрать текущий каталог, в котором нужно произвести переименование.
    3. Запустить команду:
    FOR /R %f IN (*.bin) DO REN "%f" *.exe
    которая переименует все файлы в текущем каталоге, в том числе и во вложенных тоже.
    Ответ написан
    Комментировать
  • Интересная задача на js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Решение не верно, т.к. расчитывает только на эти 4 имени. Что, если там будут другие?

    Алгоритм:
    1. составить объект, где ключи – имена, а значения – счётчики, сколько раз имя встретилось.
    2. после полного подсчёта, найти максимум и минимум счётчиков.
    3. собрать имена, у которых счётчик равен максимуму или минимуму. Каждого, теоретически, может оказаться больше одно, поэтому – в массивы имён.
    4. пройти по всем ключам объекта со счётчиками, и исключить имена, которые есть среди макс и мин. – останутся «остальные».


    spoiler
    const mostLeastAndTheRest = names => {
      const dict = names.reduce((acc, name) => ((acc[name] ??= 0), acc[name]++, acc), {});
      // { "Женя": 3, "Иван": 1, "Виктор": 4, "Константин": 1 }
    
      const values = Object.values(dict);
      const max = Math.max(...values);
      const min = Math.min(...values);
    
      const entries = Object.entries(dict);
      const winners = entries.filter(([_, value]) => value === max).map(([key, _]) => key);
      const losers = entries.filter(([_, value]) => value === min).map(([key, _]) => key);
      const rest = Object.keys(dict).filter(name => !winners.includes(name) && !losers.includes(name));
      return { winners, losers, rest };
    };
    
    mostLeastAndTheRest(['Женя', 'Женя', 'Иван', 'Женя', 'Виктор', 'Виктор', 'Константин', 'Виктор', 'Виктор']);
    /*
    {
      "winners": [ "Виктор" ],
      "losers": [ "Иван", "Константин" ],
      "rest": [ "Женя" ]
    }
    */


    Ещё вопрос — особый случай, если всех одинаковое число, то все – «победители» или «проигравшие» ?
    Ответ написан
    1 комментарий
  • Как выполнять скрипт php в фоне?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это называется не "в фоне" а по расписанию.
    И теперь, зная правильное название, можно легко найти ответ поисковиком
    Ответ написан
    Комментировать
  • Какой оптимальный алгоритм для однозначного определения слагаемых в сумме?

    @Akela_wolf
    Extreme Programmer
    Самое простое - шифруйте последние 2 цифры номера заказа как копейки в сумме платежа. Или 3 цифры - как последняя цифра рублевой суммы + копейки. Уникальности не будет, но сократить количество кандидатов в 100-1000 раз может оказаться вполне достаточно для вашей задачи.

    Но это такое себе решение. Вообще у наложенного платежа (а бланк наложенного платежа, по идее, готовите вы как отправляющая сторона) есть поле "назначение". И почта обязана вам его отдавать вместе с платежом. Что мешает вписать в назначение номер заказа в вашей системе? "Оплата заказа #XXX-YYY-ZZZZ" или как-то так.
    Ответ написан
    Комментировать