Задать вопрос
  • Есть ли возможность "обратного" биллинга. То есть, зная местоположение и дату определить номера телефонов, находившиеся в этом месте и в это время?

    delphinpro
    @delphinpro
    frontend developer
    Довольно очевидно, что у оператора есть информация о соединении абонентского устройства с базовой станцией. Грубо говоря — IMEI + CELL ID + DATETIME
    По этой инфе технически можно сделать выборку как списка CELL_ID для конкретного IMEI, так и список IMEI для конкретных CELL_ID в заданный промежуток времени.

    Есть ли у оператора программные интерфейсы для этого?
    Скорее всего есть

    Пользуются ли они ими?
    Скорее всего да.
    Ответ написан
    Комментировать
  • Не получается установить gulp4 gulp-sass?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Ну элементарно же
    let watch = gulp.parallel(build, watchFiles, browserSync);

    Вы пытаетесь запустить задачу watchFiles, но где она?

    О чем вам белым по черному и пишут.
    Ответ написан
  • Что будет, если зарегистрировать брендовый домен?

    delphinpro
    @delphinpro
    frontend developer
    Да тут всего-то три варианта
    1, владелец бренда у вас его выкупит
    2, владелец бренда у вас его отсудит (возможно еще и вам что-то выплачивать прилетит)
    3, владельцу бренда будет пофиг
    И все три имеют место быть с ненулевой вероятностью.
    Ответ написан
    Комментировать
  • Как запустить gulp task из кода?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    Так же в голову пришла идея, в отдельных файлах писать правила для медиа запросов, выглядит так

    Очень плохая мысль.
    Вы используете препроцессор. Используйте на полную. Пишите правила медиа прямо внутри селектора, к которому они применяются.

    Плюс начните использовать плагин для комбинации медиа (combine-mq и подобные) — они в результирующем css соберут все медиа в конце файла.

    По вопросу: вы можете вызывать несколько тасков

    gulp.watch(src.less, ['less1', 'media']);
    gulp.watch(src.media, ['media']);
    Ответ написан
  • Как вернуться обратно при регистрации?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Валидаторы надо использовать. Ларка сама перекинет куда нужно.

    ЗЫ
    Обожаю смесь английского и транслита =) Не знаешь слово — забей в переводчик. И напишешь правильно, и слово новое выучишь.
    rayon => district
    metro => subway
    Ответ написан
  • Как можно файлы вайбера с планшета перекинуть на компьютер?

    delphinpro
    @delphinpro
    frontend developer
    Когда устройства в одной сети.
    Расшарить папку на компе.
    Поставить в андроид любой файл-менеджер, я люблю X-plore или total
    Перекидывать файл-менеджером через виртуальную папку LAN любые файлы туда и обратно.
    Ответ написан
  • Как переделать синтаксис gulpfile.js гальп 3 под гальп 4?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    Как-то так
    const gulp = require('gulp');
    const gulpHtml = require('gulp-html');
    const webpackStream = require('webpack-stream');
    const gulpAutoprefix = require('gulp-autoprefixer');
    const gulpSass = require('gulp-sass');
    const gulpWatch = require('gulp-watch');
    const gulpSourceMap = require('gulp-sourcemaps');
    const browserSync = require('browser-sync').create();
    const gulpStylelint = require('gulp-stylelint');
    const gulpImage = require('gulp-image');
    const historyFallback = require('connect-history-api-fallback');
    const webpackConfig = require('./webpack.config.js');
    
    export const stylesheets = () => {
      return gulp.src('./src/scss/**/*.scss')
        .pipe(gulpStylelint({
          failAfterError: false,
          reporters     : [
            {
              formatter: 'string',
              console  : true,
              fix      : true,
            },
          ],
        }))
        .pipe(gulpSourceMap.init())
        .pipe(gulpSass({
          outputStyle: 'compressed',
        })).on('error', gulpSass.logError)
        .pipe(gulpAutoprefix({
          browsers: ['last 2 versions'],
        }))
        .pipe(gulpSourceMap.write())
        .pipe(gulp.dest('./dev/css/'))
        .pipe(browserSync.stream());
    };
    
    export const stylesheetsProduction = () => {
      return gulp.src('./src/scss/**/*.scss')
        .pipe(gulpStylelint({
          failAfterError: true,
          reporters     : [
            {
              formatter: 'string',
              console  : true,
              fix      : true,
            },
          ],
        }))
        .pipe(gulpSass({
          outputStyle: 'compressed',
        })).on('error', gulpSass.logError)
        .pipe(gulpAutoprefix({
          browsers: ['last 2 versions'],
        }))
        .pipe(gulp.dest('./build/css/'));
    };
    
    export const js = () => {
      return gulp.src('./src/js/main.js')
        .pipe(webpackStream(webpackConfig))
        .pipe(gulp.dest('./dev/js'))
        .pipe(browserSync.stream());
    };
    
    export const jsProduction = () => {
      webpackConfig.watch = false;
    
      gulp.src('./src/js/main.js')
        .pipe(webpackStream(webpackConfig))
        .pipe(gulp.dest('./build/js'));
    };
    
    export const image = () => {
      return gulp.src('./src/images/*')
        .pipe(gulpImage())
        .pipe(gulp.dest('./dev/images'))
        .pipe(browserSync.stream());
    };
    
    export const imageProduction = () => {
      return gulp.src('./src/images/*')
        .pipe(gulpImage())
        .pipe(gulp.dest('./build/images'));
    };
    
    export const html = () => {
      return gulp.src('./src/template/**/*.html')
        .pipe(gulpHtml())
        .pipe(gulp.dest('./dev'))
        .pipe(browserSync.stream());
    };
    
    export const htmlProduction = () => {
      return gulp.src('./src/template/**/*.html')
        .pipe(gulpHtml())
        .pipe(gulp.dest('./build'));
    };
    
    const watch = () => {
      gulpWatch(['./src/scss/**/*.scss'], () => {
        gulp.start('stylesheets');
      });
      gulpWatch(['./src/images/**/*'], () => {
        gulp.start('image');
      });
      gulpWatch(['./src/template/**/*.html'], () => {
        gulp.start('html');
      });
    };
    
    const server = () => {
      return gulp.series(function () {
        browser.init({
          server: {
            baseDir   : './dev',
            middleware: [
              historyFallback(),
            ],
          },
          open  : true,
          port  : 8080,
        });
      });
    };
    
    // ХЗ что это такое....
    // gulp.task('server', gulp.series('build', function () {
    //   browser.init({
    //     server: {
    //       baseDir   : './dev',
    //       middleware: [
    //         historyFallback(),
    //       ],
    //     },
    //     open  : true,
    //     port  : 8080,
    //   });
    // }));
    
    export const development = gulp.series(
      gulp.parallel(
        stylesheets,
        js,
        image,
        html,
      ),
      gulp.parallel(
        watch,
        server,
      ),
    );
    
    export const production = gulp.parallel(
      stylesheetsProduction,
      jsProduction,
      imageProduction,
      htmlProduction,
    );
    Ответ написан
  • Как сделать так что бы при нажатии на Enter, текст в textarea переносился?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Ну очевидно же:

    if (event.code === 'Enter') {
      textArea.textContent += '\n'
    };
    Ответ написан
  • Как правильно подключать плагины jquery в gulp scss?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Вы из какой директории сервер поднимаете? Наверное что-то вроде dist. А файлы подключаете из src.
    Сделайте таск, который будет копировать файлы плагинов в dist
    И лучше вендоров ставить через npm, и копировать прямо из node_modules.
    Ответ написан
  • Правильные ли конфиги вебпак и gulp для Vue проекта?

    delphinpro
    @delphinpro
    frontend developer
    Да, забивать шурупы молотком — это хороший выбор =)

    Но в целом, вроде правильно. Если через webpackStream

    Я так делал. правда не для Vue, а просто, чтобы писать на привычном es6.
    Но я использовал node интерфейс вебпака.
    Покажу свой таск, разбирайтесь:

    webpack.task.js

    const path = require('path');
    
    const bs      = require('browser-sync');
    const webpack = require('webpack');
    
    const config      = require('../../gulp.config');
    const tools       = require('../lib/tools');
    const DEVELOPMENT = require('../lib/checkMode').isDevelopment();
    
    let webpackConfig = require(path.join(config.root.main, 'webpack.config.js'));
    
    function showInfo(err, stats) {
      // эту функцию приводить не буду. просто вывод ошибок в консоль
    }
    
    module.exports = function (options = {}) {
    
        options = {
            watch: false,
            ...options,
        };
    
        return function (done) {
    
            const compiler = webpack(webpackConfig);
    
            if (options.watch) {
                tools.info('Webpack watching...');
    
                compiler.watch({
                    ignored         : /node_modules/,
                    aggregateTimeout: 300,
                }, (err, stats) => {
    
                    showInfo(err, stats);
    
                    if (DEVELOPMENT && bs.has(config.browserSync.instanceName)) {
                        bs.get(config.browserSync.instanceName).reload();
                    }
                });
    
            } else {
    
                compiler.run((err, stats) => {
                    showInfo(err, stats);
                    done();
                });
    
            }
    
        };
    };
    Ответ написан
  • Разный Layout для страниц?

    delphinpro
    @delphinpro
    frontend developer
    Nested routes я полагаю.

    <Route component={App} path="/">
      <Route component={Layout1} path="/">
        <Route component={View1} path="/view1"></Route>
        <Route component={View2} path="/view2"></Route>
      </Route>
      <Route component={Layout2} path="/">
        <Route component={View3} path="/view3"></Route>
        <Route component={View4} path="/view4"></Route>
      </Route>
    </Route>


    Я правда не помню, как это пишется в реакте. Мы на Vue таким образом решаем проблему лейаутов.
    Ответ написан
  • Какие есть способы ведения документации JSON/XML структур?

    delphinpro
    @delphinpro
    frontend developer
    Если ориентироваться на тег ajax, то можно предположить, что речь идет об ответах API. Тот же OpenAPI позволяет описать в том числе и структуру json ответов.
    Ответ написан
  • Как вынести в отдельный массив элементы, которые не помещаются я в контейнере?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Вам концепт нужен или что?

    Могу предложит следующее.

    Делаем строку не переносимой на новую строку (nowrap, flex, overflow)
    Основной враппер с обрезкой (overflow)
    Внутри контейнер с элементами (flex no wrap, white-space nowrap)
    Таким образом мы сможем получить ширину враппера и ширину контейнера.
    Если ширина внутреннего контейнера меньше враппера — ничего не делаем, всё помещается.
    В противном случае проверяем ширину последнего элемента. Если она больше (wrapper_width - first_el_width), то последний слишком широкий. Тогда мы вырезаем все внутренние со второго по предпоследний. В последнем обрезаем длину (можно через css ellipsis).
    Если последний элемент не такой широкий, то подсчитываем ширины средних элементов, начиная с предпоследнего до тех пор пока не станет больше или равной разнице ширин контейнера и враппера. Такое количество элементов вырезаем.
    Ну и на месте вырезанных элементов можно размещать кнопку с троеточием, по клику на которую будет выпадать список в вырезанными элементами.
    Ответ написан
    Комментировать
  • Почему переменная scss в компоненте vue - undefined?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Вот здесь гляньте VueJS: где лучше хранить css, в компонентах .vue или main.css?

    Переменные не нужно объявлять в компонентах (только если локальные, чисто для этого компонента)
    Их нужно вынести в отдельный файл и подключить этот файл глобально, через конфиг webpack

    PS/ Код конфига в том моем ответе возможно устарел. Уточните имена опций в документации sass-loader.
    Ответ написан
  • Почему зависает browserSync при изменении в файлах?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    gulp.watch("#src/sass/**/*.sass").on('change', browsersync.reload);


    watch должен запускать задачу, а не перегружать страницу.
    А в конце задачи должен быть вызов браузер синка.
    примерно так:

    gulp.watch("#src/sass/**/*.sass").on('change', sassTask);
    и в задаче sassTask
    .pipe(browsersync.stream()))

    stream — не перезагружает страницу, а обновляет код в открытой. По моим наблюдениям это работает только со стилями. В js и других тасках лучше использовать .reload
    Ответ написан
    Комментировать
  • Может ли gulp присоединить к Angular/React/Vue?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    Gulp не нужен здесь.
    У них в комплекте идут свои уже настроенные сборщики.

    Если говорить о Vue - это интерфейс vue ui.
    Запускаете его из консоли, открывается панель управления в браузере. Там выберете нужные опции и создадите проект с готовой конфигурацией.
    Ответ написан
  • Carbon, как к одной дате выведенной из базы прибавить другую?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Делаем нормальную модель.
    В модели кастуем поле с датой к дате
    И получаем готовое поле Carbon, с которым делаем что хотим.
    Ответ написан
    Комментировать
  • Как получить данные с сервера?

    delphinpro
    @delphinpro
    frontend developer
    если что то поменять по FTP или в админке на сервере,


    В первую очередь нужно исключить подобные вещи.

    Если же все-таки кто-то вносил правки на сервере и их нужно сохранить, то заходим на сервер по ssh, стэшим все изменения, пуллим свежак из репы. Достаем правки из стэша, оформляем новый коммит(ы) и отправляем их в репу.
    Ответ написан
  • Как менять контент только определенного блока?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Я думаю использовать ajax запросы на сервер и получать уже готовую вёрстку в результате рендерить с помощью JS.

    Верно.
    Для начала нормально.
    Потом можно перейти в использованию шаблонизатора на клиенте и получение по аякс не разметки, а чистых данных в json.
    Третий этап — переход на использование js-фреймворка.
    Ответ написан
    Комментировать
  • Обьекты.клонирование, права доступа, поможете?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    const student = {
        name   : 'Sasha',
        age    : 46,
        surname: 'Belov',
      };
      const studentCS = { ...student };
      studentCS.speiality = 'Computer Science';
    
      const courses = {
        Math   : 10,
        English: 9,
        Sport  : 8,
      };
      const permissions = {
        canView : true,
        canEdit : false,
        canPrint: true,
      };
      Object.assign(studentCS, courses, permissions);
      console.log(studentCS);
    
      studentCS.average = function () {
        return (this.Math + this.Sport + this.English) / 3;
      };
      studentCS.checkPermission = function () {
        return [
          this.canView,
          this.canEdit,
          this.canPrint,
        ].filter(i => i).length;
      };
      console.log('Score: ' + studentCS.average());
      console.log('Number of enabled rights: ' + studentCS.checkPermission());
    Ответ написан
    1 комментарий