Ответы пользователя по тегу JavaScript
  • Сложно ли выучить React-Native?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сам по себе react-native очень сырой и кривой в различных вариациях - без нативной разработки и ковыряния issues'ов в github'e в нём совсем никак. Без знания Obj-C / Swift'a и Java/Kotlin лезть не советую, иначе будут глупые вопросы по типу: "а где мне найти нормальную либу для анимаций в 60fps ?", ответом будет: "Взять и написать".

    Сам по себе RN под iOS был написан на C C++ Obj-C и Obj-C++ в разное время и разными людьми, без тестов.
    В целом ощущение что "собрали на скорую руку из говна и палок".
    Ответ написан
    Комментировать
  • Как разделить поток на несколько файлов в Gulp.js?

    voidnugget
    @voidnugget
    Программист-прагматик
    var merge = require('merge-stream');
    gulp.task('sass-global', function () {
      var merged = merge();
      global_css.forEach((entry) => {
        merged.add(gulp.src(entry)
          .pipe(plugins.plumber({errorHandler: plugins.notify.onError("<%= error.message %>")}))
          .pipe(plugins.sourcemaps.init())
          .pipe(plugins.sass())
          .pipe(plugins.autoprefixer({
            browsers: prefix_list,
            cascade: false
          }))
          .pipe(plugins.csscomb('./dev/libs/comb/research.json'))
          .pipe(plugins.sourcemaps.write('./'))
          .pipe(gulp.dest('./public/css')));
      });
    
      return merged;
    });


    Типа так
    Ответ написан
    9 комментариев
  • Почему консоль выводит html?

    voidnugget
    @voidnugget
    Программист-прагматик
    Все элементы DOM дерева с объявленным id автоматически становятся атрибутами глобального объекта window. console.log(box); и console.log(window.box); - одно и тоже. Это стандартное поведение для cовременных браузеров (ES5+ afaik) и одна из причин по которой секторы на основе id выполняются медленее чем уникальные селекторы на основе сlass атрибута, привет БЭМ.

    На примере этой же страницы можно вбить console.log(window.adriver_banner_403766071); в консоль браузера.
    Ответ написан
    3 комментария
  • Как разобрать минимизированный JS скрипт?

    voidnugget
    @voidnugget
    Программист-прагматик
    Вот так. Любым автоформатированием, я использовал atom-beautify.
    Ну это дефолтный adriver'овский сприпт для разбора существующих рекламных спотов на страницах и сбора инфы о используемых рекламных площадках, может ещё чего собирает - надо смотреть.
    Ответ написан
    Комментировать
  • Gulp plugin css code style?

    voidnugget
    @voidnugget
    Программист-прагматик
    У Gulp'a есть родной фрактальний плагин к js-beautify.

    А он умеет html / js / css бьютифицировать.

    Я частенько пользуюсь atom-beautify на право и на лево.
    Ответ написан
    Комментировать
  • Существует ли публичный стордж для хранения файлов, которые слишком большие для отправки на сервер?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нет, бесплатных не существует.
    Для хранения больших файлов стоит смотреть в сторону Amazon Glacier.

    Вообще не вижу проблемы делать chunked file upload через какую нить JS file api обёртку.
    Ответ написан
    Комментировать
  • Для новичка лучше учить ЯП исходя из задач, которые хочется решать или наиболее простой язык?

    voidnugget
    @voidnugget
    Программист-прагматик
    Есть один важный аргумент против питона, ruby и php - относительно низкая производительность, и следовательно невозможность разработки полноценных "реактивных" решений. Node.js будет шустрее, а golang с Java (J2SE) и подавно...

    Нужно выбирать язык исходя из полноты, качества поддержки и зрелости существующих инструментариев.
    Если это вэб - лучше ити в сторону meteor + react <-> express + mongo и не парить одно место.
    Если нужна производительность бэкенда - лучше смотреть в сторону ванильной Java с netty, это Vert.x.
    Касательно зрелости и качества поддержки - история умалчивает, но аналогов особо то в других платформах нету.
    Ещё стоит разобраться со вторым Angular'ом когда он выползет с альфы, правда там сначала был TypeScript, а теперь Dart + JS :x

    Главным аргументом против Java является ужаснейший Overhead разнообразных J2EE поделок с сервлетами, подавляющее большинство существующих решений использует именно это окружение - по сравнению с ванильным Netty, Overhead составляет 1 к 30. Scala тоже имеет довольно большой overhead, но он не является проблемой, вот скорость компиляции просто ужасна - в ~100 раз медленнее Java. Для того что бы эффективно выполнять задачи в Scala (Python / Erlang / Clojure etc) - нужно проводить 80% времени в интерпретаторе, не всем это по душе, да и мешает внедрению нормального CI с TDD/BDD. Имхо Groovy более юзабелен сейчас чем Scala, особенно для скриптов, и оверхед у него минимальный (при правильном приготовлении), и скорость компиляции не доставляет неудобств.

    C# + asp.net решение двузначное, я не знаю как сейчас обстоят дела с OpenSource проектами в оных местах - последние два года ситуация обещала исправится (CLR заOpenSource'или), но чуда так и не произошло.

    Long story - short. Если тремя предложениями, то ...
    Стоит вообще забить на Python, учить JS Meteor Express React MongoDB и опционально Dart со вторым Angular.
    Также важно научится собирать фронтэнды gulp'ом со всякими минификаторами, livereload'ами (browsersync), stylus node-sass jshint jscs csslint jsbeautifier ... и прочим барахлом. Ruby'сткий Sass с compass'ом стоит обходить стороной из-за слоупочности.
    Ответ написан
    6 комментариев
  • JavaEE + front-end(фриланс) - реально?

    voidnugget
    @voidnugget
    Программист-прагматик
    Популярность JavaEE в современных проектах стремится к нулю - большая часть существующих фреймворков отказываются от сервлетов и "ынтерпрайсностей" в пользу ванильной Java с Netty, и тому есть довольно много причин. Ну, хотя бы намного более высокая производительность, по моему личному опыту где-то 1:30. Из исключений припоминаются Grails, Ninja framework. Есть ещё динозавры типа Struts и Wicket - их часто используют "по привычке" вместе со Spring'ом, но практической выгоды от подобного не много. В общем у всех есть свои причины "ынтерпрайстности", но по большей части это связано с "бюрократией" контор-разработчиков.

    Стоит познакомится с Vert.x и ratpack.
    Play2 - тоже хорошо, но наблюдается значительный overhead из-за использования Akka + Scala.
    Стоит разобраться с GraphQL и Relay + React. Ну и поиграться чуток с Meteor + React.
    На определённом этапе нужно реализовывать свой собственный транспорт для EventSource, я как раз собираюсь этим заняться в свободное время.
    Ответ написан
    4 комментария
  • Как получить значения JSON (JS)?

    voidnugget
    @voidnugget
    Программист-прагматик
    var x = {
      key1: 'dumbvalue',
      key2: '12345678',
      key3: '11234567'
    };
    
    var regex = /^1234/;
    
    var results = Object.keys(x).filter(function(key) {
      if (typeof x[key] === 'string') {
        return x[key].match(regex) !== null;
      }
    
      return false;
    }).map(function(key) {
      return x[key];
    });
    
    console.log(results);
    Ответ написан
  • PHPStorm, куда слезть с него? nodejs / frontend разработчики, поможете?

    voidnugget
    @voidnugget
    Программист-прагматик
    Atom / Sublime обычно покрывает все потребности.
    Хотя для вёрстки часто использую Brackets.
    Сейчас занимаюсь портированием работы с PSD'шками с Brackets в Atom - не нравится как работает Avocode в Atom'e.
    Ответ написан
    Комментировать
  • Как оптимизировать передаваемый трафик через socket.io?

    voidnugget
    @voidnugget
    Программист-прагматик
    Если используется deflate - смысла пережимать нету.
    Можно поиграться с JSZip, но это создаст дополнительную нагрузку.
    Если хотите создать эффективный протокол - лучше использовать protobuf.
    Ответ написан
    Комментировать
  • Как правильно настроить Jasmine Unit testing?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сначала происходит загрузка boot.js или node_boot.js - там в window или global пишутся все методы jasmine интерфейса. Типа вот так
    'use strict';
    
    var jasmineRequire = require('jasmine-core/lib/jasmine-core/jasmine');
    
    var jasmine = jasmineRequire.core(jasmineRequire);
    window.jasmine = jasmine;
    
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
    
    var env = jasmine.getEnv();
    var jasmineInterface = jasmineRequire.interface(jasmine, env);
    
    function extend(destination, source) {
      for (var property in source) {
          destination[property] = source[property];
      }
    
      return destination;
    }
    
    extend(window, jasmineInterface);

    Потом идёт добавление репортера, ну или можно написать свой, под конкретные задачи...

    Инициализация под node.js отличается лишь ConsoleReporter'ом, в браузерной используется HtmlReporter.

    После инициализации в window / global уже есть все it describe expect барахло, и можно писать спеки,
    для их запуска просто делается
    jasmine.getEnv().execute();

    Там для ноды отдельно есть "удобная" обёртка для ленивых...
    Если глянуть исходники, то в принципе должно быть понятно по основным методам
    showColors - отображать ли разноцветные сообщения, форточки не умеют
    addSpecFile - добавить файлик спеки
    addReporter - добавить репортер
    configureDefaultReporter, он же ConsoleReporter
    addMatchers не помню
    loadSpecs - просто require спеков
    loadHelpers - просто require хэлперов
    loadConfigFile - загрузка конфига
    loadConfig - загрузка конфига с объекта
    addSpecFiles - добавить кучу файлов спек
    onComplete - вызвать callback по завершению
    stopSpecOnExpectationFailure - прервать выполнение тестов если возникает исключение

    В принципе
    var Jasmine = require('jasmine');
    var jasmine = new Jasmine();
    
    jasmine.loadConfig({
        spec_dir: 'tests',
        spec_files: [
            'requests/**/*.js'
        ],
    });
    
    // или jasmine.loadConfigFile('spec/support/jasmine.json');
    
    jasmine.configureDefaultReporter({
        showColors: false // если это форточки
    });
    
    jasmine.execute();

    Для запуска тестов в node.js будет достаточно.
    Ответ написан
    2 комментария
  • ExtJS 6 перелопатили или как создать простейшее приложение?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нет. Нормальной сборки и загрузки в ExtJS не припоминаю (со второй версии), обычно лепил Gulp/Grunt сборщики.
    Я слез на Vaadin и доволен, хотя и с extgwt дело было, и с ZK, но остановился именно на нём.
    Ответ написан
    Комментировать
  • Как безопасно сохранять и рендерить форматированный текст в ReactJS SPA?

    voidnugget
    @voidnugget
    Программист-прагматик
    Можно рендерить в браузере, либо фильтровать.
    Никто не мешает делать вот так
    <b style="width:expression(alert('bad style!'))"> \o/ </b>

    Так что, чаще всего, кастомные стили тоже напрочь выпиливают.
    Хотя, после CSS кейлоггеров в скроллбарах и в SVG'шках, я уже мало чему удивляюсь.
    Ответ написан
    Комментировать
  • Это говнокод или норма JS?

    voidnugget
    @voidnugget
    Программист-прагматик
    1. Это код человека не удосужившегося поискать любую существующую библиотеку интернационализации, либо ознакомившегося с Intl'ом для которого есть вполне вменяемые полифилы.
    2. Это характеризует его как человека который хочет делать "хорошо", а получается "как всегда" из-за недостатка знаний и опыта.
    Ответ написан
    1 комментарий
  • Есть ли на практике нынче отдельный "чистый" верстальщик в продакшене при разработке FrontEnd'a web-приложений?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сейчас современная вёрстка не обходится без кучи сторонних инструментов типа gulp, stylus, sass, csslint и прочего, которые мало того что и время экономят так и очень пересекаются с фронтом. Хотя, на практике, даже стабильных полифилов для относительных метрик, да и для анимации, сейчас нет :( А отзывчивость в пикселях - неуважение к себе (адаптивность немного с другой оперы).
    Ответ написан
    1 комментарий
  • Будущее у RestFull сайтов?

    voidnugget
    @voidnugget
    Программист-прагматик
    Я лично выбрал для себя реакт, так как он спокойно пререндерится в node.js и с небольшими плясками с cqrs-es'ом его можно заставить очень и очень хорошо работать, но это не для простых смертных и большинству адептов недоступно. Будущее есть - нормальных инструментов нет.
    Ответ написан
  • Что выбрать php ли java?

    voidnugget
    @voidnugget
    Программист-прагматик
    С РНР/Python/Ruby проблема - в них нет возможности нормально писать масштабируемые реактивные приложения.
    Нет возможности постоянно держать соединения для push'a без костылей типа gearman / beanstalk / celery / sidekiq etc, и там уже не MVC, a CQRS-ES ... в общем весело.

    Советую присмотреться больше к Java / Golang'у.
    Вот к ноде лезть не советую - слишком мелкая производительность, и сомнительная обратная совместимость.
    Ответ написан
  • Есть ли такой скрипт который позволяет открывать ссылки в бэкграунде?

    voidnugget
    @voidnugget
    Программист-прагматик
    Можно написать браузерное расширение (extension).
    Простое window.open(url, '_blank'); не сработает.

    Также есть СSS3 свойство target-new, правда ничего не могу сказать по поводу совместимости.

    По умолчанию это всё считается всплывающими окнами, и нужно явно разрешить возможность их открытия.
    Ответ написан
    6 комментариев
  • Можно ли сделать асинхронную загрузку yandex-карты?

    voidnugget
    @voidnugget
    Программист-прагматик
    Да, но там куча сложностей.
    Используйте rx.js что бы было проще с асинхронной загрузкой, и кэшируйте readahead.
    Планирование readahead'а можно рассчитывать в зависимости от ширины канала каждого конкретного устройства.
    Ответ написан
    Комментировать