• Какой есть способ проверки полного вхождения одного массива в другой на JavaScript без использования двойного цикла?

    NeX
    @NeX
    Если подключен undersore, то, например, так:
    http://underscorejs.ru/#without
    // Вернет массив a без элементов из массива a
    if (_.without.apply(this, b.unshift(a))) {
    }
    Ответ написан
    Комментировать
  • Пожалуйста оцените мое убогое ООП?

    Stasgar
    @Stasgar
    Обученная макака
    Во-первых: начните изучать архитектурную часть программирования, изучите паттерны проектирования, изучите SOLID, DRY, KISS и остальные модные словечки, постарайтесь всё это осознать, или, на крайняк - зазубрить. Всё придет с опытом, изначально все не понимали зачем всё так сложно, но эта сложность обусловлена неисчислимыми литрами слёз и потраченных нервов, всё не просто так.

    Судя по всему это тестовое или учебное задание. От вас требовалось отоверинжинирить простую задачу. Давайте попробуем:

    Суть задачи - есть файл с определенной структурой хранения данных, структура строковая. Требуется этот файл преобразовать в другую структуру данных и вывести эту структуру в json формате. Задача ясна.

    Разобъем задачу на отдельные независимые этапы:
    1) Преобразование одной структуры данных (текстового файла) в другую (объект, понятный PHP, к примеру)
    2) Преобразование этой структуры данных в Json формат.
    Первый вопрос, который может возникнуть - почему сразу не преобразовать в json? Ответ - при расширении системы в будущем - нам понадобится вывести данные в виде массива, или в виде XML, или даже в виде готового файла Excel. Нам будет сложно дополнять логику изначального класса, ничего при этом не сломав и не затронув уже существующий функционал. Также ответом на этот вопрос может являться каждая буква из SOLID принципов, подробнее отвечу дальше, когда буду пояснять за реализацию, см. ниже

    Теперь рассмотрим эту задачу с точки зрения ООП, начнем думать не от конкретной реализации, а от интерфейса и абстракции (мы не парсим конкретный файл, мы парсим просто файл, мы не переводим его в конкретное представление json, мы переводим его просто в представление):
    Нам понадобится 2 класса - непосредственно класс, читающий файл и преобразующий его в простейший тип данных (например PHP array). Второй класс - преобразователь простейшего типа данных парсера в какой-то определенный тип:
    1. LogFileReaded implements/extends FileReaderContract(интерфейс, возможно абстрактный класс, если понадобится предустановленная логика)

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

    2. JsonPresenter implements/extends DataTypePresenterContract

      Абстракция содержит контракт на метод output(), а в конструкторе принимются исходные данные. В конкретной реализации JsonPresenter в output() будет банальный json_encode() (да, это нормально, нет, класс не лишний и нет, json_encode() нельзя пихать в сам парсер) А теперь к вопросу - почему не следует просто запихать это всё в парсер и вместо массива отдать json: в будущем, когда система будет расширяться - нам понадобится представить данные в виде XML - что тогда будем делать - переписывать весь код парсера ради добавления switch case "json" и т.д.? А если что-то сломается во всей системе? А если вариантов представления станет настолько много, что файл будет просто не читаем? А при данном подходе достаточно будет просто написать новый класс XMLPresenter, или даже ExcelPresenter, который на выводе не строку будет выдавать, а целый файл (опустим типизацию output пока)). Также этот класс можно реализовать в виде декоратора (паттерн), да и много еще как.



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

    К примеру: в итоге, если вас уже повысили, и вы вместо парсинга стали заниматься более высшими материями - новому программисту, чтобы дописать логику преобразования данных в Excel не нужно знать как конкретно вы преобразовывали когда-то эти данные в json, ему не нужно дебажить ваш код, ему достаточно посмотреть на интерфейс - отнаследоваться от него и написать свой собственный метод преобразования и дальше использовать его в нужном месте.

    P.S. В данной реализации опускаются и упрощаются некоторые моменты для понятности
    Ответ написан
    21 комментарий
  • Как можно сейчас стилизовать ленту twitter на сайте - сейчас?

    @frees2
    Хороший вопрос, может его расширить, ибо не найти в завалах, как получить или создать ленту твиттера, про json и не мечтаю.
    Ответ написан
    Комментировать
  • Как правильно реализовать архитектуру AJAX приложения?

    @davidnum95
    А вы знатный велосипедист.
    - не знаю как правильно обрабатывать и контролировать состояние AJAX запросов (на одной странице их может быть несколько) - как я теперь понимаю, нужно использовать PROMISE (но пока не понял, как это работает - достаточно сложно воспринять)

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

    react stateful components
    - фактически view совмещен с контроллером, из-за этого уже сейчас сложно работать с файлами контроллеров - они разрастаются и содержат много html - кода. Кроме того, они завязаны на глобальные данные, про которые я уже писал и получается, что ни о каком модульном подходе не приходится говорить. Как от этого избавиться при текущей архитектуре не знаю.

    react-redux, react decomposition
    - практически все данные и весь код приложения доступен и открыт через консоль браузера (можете сами посмотреть). В том числе видна вся структура приложения - можете сами посмотреть. Можно ли что-то с этим сделать я не знаю.

    webpack, etc...
    - не знаю, как реализовать какую-то единообразную схему обработки ошибок в приложении, без дублирования кода. Чтобы все скрипты вдруг не валились, если где-то что-то сломалось. То же самое и про единнообразную обработку AJAX запросов (знать когда все запросы исполнились и т.п.)

    react error boundaries
    - проблема с навигацией и индексацией из-за AJAX (сейчас вроде как уже понял, что нужно использовать pushState)

    react-router, ssr
    - что делать и нужно ли что-то делать для тех, кто не использует JS. Например те же рекомендации по SEO для AJAX говорят что для всех динамических страниц нужно иметь статический snapshot. Как его реализовать - чтобы это было "дешево (просто) и сердито (не криво)" я не знаю.

    ssr
    В целом мое желание сейчас - понять, как переделать приложение так, чтобы его потом можно было без боли поддерживать, расширять и чтобы оно работало стабильно и единнообразно.

    Таким образом проще переписать приложение с использованием какого нибудь современного стэка (react например)
    Ответ написан
    6 комментариев
  • Как выявить браузеры без поддержки стилей?

    lamer350
    @lamer350
    กำลังสูงสุด
    А как по мне - лучше использовать https://modernizr.com и выводить сообщения при отсутствии поддержки нужных вам стилей.
    Ответ написан
    Комментировать
  • Как происходит совместная работа бэкенд- и фронтенд-разработчиков над большими проектами?

    freislot
    @freislot
    Frontend-разработчик
    с каких пор бэкэндеры натягивают верстку куда-то?)) бэк пишет api и запросы к базе, а фронт верстает, обращается к бэку за данными и выводит их.
    Ответ написан
    1 комментарий
  • Как защититься от парсельщиков?

    @deliro
    Нет
    Ответ написан
    Комментировать
  • Работа на python в больших компаний?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Практически нереально найти работу, где надо будет использовать и Python и Java. Либо одно, либо другое. Что сокращает ваш вопрос до "Можно ли найти работу python-программистом?" Да, можно.
    Ответ написан
    2 комментария
  • Какую систему выбрать для хранения данных в веб-приложение?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Cache объект
    + можно легко заполнить при регистрации ServiceWorker одной командой
    - не надежно в плане хранения

    indexedDB
    + надежное хранилище
    + хранение бинарных данных
    - для работы нужно много кода писать

    localStorage
    + самое простое апи
    - хранит только строки
    - не доступно из ServiceWorker, что для поддержки оффлайн режима может стать критичным
    Ответ написан
    Комментировать
  • Так умеют ли поисковики индексировать SPA?

    @McBernar
    Да просто добавьте SSR. Есть же даже куча сервисов для этого.
    Ответ написан
    Комментировать
  • Как подбирать подобные интересные цвета?

    @Camaro67
    Помог? - "Отметить решением"
    Подбор цветов происходит на вкус дизайнера, у которого он либо есть либо его нет. Если нет чувства прекрасного, то его нужно развивать (если это возможно) :)
    Ответ написан
    1 комментарий
  • А как вы проектируете новый сайт\сервис визуально?

    OtshelnikFm
    @OtshelnikFm
    Обо мне расскажет yawncato.com
    как Вы проектируете визуально проекты?

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

    Sanes
    @Sanes
    Нет никакой формулы. Как договорились, так и будет.
    Ответ написан
    10 комментариев
  • Какие навыки нужны для DevOps-инженера?

    DevOps по-человечески звучит как "программист и сисадмин в одном лице".
    Ответ написан
    1 комментарий
  • Как правильно работать с исключениями?

    @cicatrix
    было бы большой ошибкой думать
    Если б однозначный ответ на ваш вопрос существовал, он бы был включён в гайды по программированию.
    Существует очень много факторов, влияющих на то, как вы должны поступать с исключениями:
    1) Вообще их не ловить, пусть об этом заботится вызывающий
    2) Ловить и обрабатывать определённые исключения, остальные пробрасывать
    3) Ловить, генерить своё, обёртывать в него внутреннее и бросать своё
    4) Ловить всё, обрабатывать самостоятельно
    5) Душить всё

    (и это далеко не полный список).

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

    В крупном проекте есть руководитель/архитектор, который должен задать либо общие правила, либо правила конкретно для вас. Для open source вопрос сложный - в библиотеках обычно исключения не обрабатываются, иногда пробрасываются.
    Если вы контролируете код от метода MyMethod и дальше вниз по иерархии вызовов, то решать вообще-то вам. Как вам удобнее, так и поступайте. Если внизу по иерархии другой код, то обычно, пока явно не оговорено обратное, поступать надо так же, как поступает код "снизу" - если бросает/пробрасывает, то и вы делайте так же, если нет - соответственно, и вы обрабатываете.
    Ответ написан
    Комментировать
  • Нужно ли учить Bootstrap 4?

    profesor08
    @profesor08
    Не надо тебе этого.
    Ответ написан
    Комментировать
  • Как найти наибольшую поседовательность за O(n)?

    Astrohas
    @Astrohas
    Python/Django Developer
    https://www.youtube.com/watch?v=t2DpD9GnhfU гуровиц объясняет более внятно.
    Просто берете стандартный алгоритм, при n-ом итеме проверяете его разницу в значениях и если разница равно 1 то только тогда увеличиваете счетчик.
    Ответ написан
    2 комментария
  • Можно ли понести ответственность за распространение исходных кодов проприетарной программы?

    BBmike
    @BBmike
    Слушай, вы вот такие незамутненные приходите сюда и вываливаете какие-то хитрые комбинации своих выдуманных условий, которые по-вашему мнению должны как-то изменить обычный и общепринятый порядок вещей.
    Нет, ваши хитросплетения не изменят этого порядка и он таков:

    - любое ПО имеет своего обладателя исключительного права;
    - этот обладатель исключительного права устанавливает режим и порядок использования соответствующего объекта интеллектуальной собственности;
    - если этот режим нарушен путем неправомерного использования, то наступает ответственность;
    - всем наплевать, при каких обстоятельствах Вы нарушили чужое право;
    Ответ написан
    2 комментария
  • Основы веб дизайна?

    Комментировать