• Как ci gitlab по ssh?

    vasilyevmn
    @vasilyevmn
    DevOps
    deploy:
      script:
        - echo 'test'
        - ./script.sh


    Естественно должен быть соответствующий флаг на скрипте
    chmod +x
    Ответ написан
    2 комментария
  • Как найти дубликаты по номеру элемента в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const getDuplicates = (arr, key) => Array
      .from(arr.reduce((acc, { [key]: n }) => acc.set(n, -~acc.get(n)), new Map))
      .filter(n => n[1] > 1)
      .map(n => n[0]);
    
    
    const duplicates = getDuplicates(arr, 1);

    или

    const getDuplicates = (arr, key = n => n) => Array
      .from(arr.reduce((acc, n) => (n = key(n), acc.set(n, acc.has(n))), new Map))
      .reduce((acc, n) => (n[1] && acc.push(n[0]), acc), []);
    
    
    const duplicates = getDuplicates(arr, n => n[1]);

    или

    const getDuplicates = arr =>
      [...arr.reduce((acc, n) => (
        acc[+acc[0].has(n)].add(n),
        acc
      ), [ new Set, new Set ])[1]];
    
    
    const duplicates = getDuplicates(arr.map(n => n[1]));

    Не поможет ли lodash?

    const duplicates = _(arr)
      .map(n => n[1])
      .groupBy()
      .filter(n => n.length > 1)
      .map(n => n[0])
      .value();
    Ответ написан
    1 комментарий
  • Как найти дубликаты по номеру элемента в массиве?

    @LJ322
    function f(arr, n) { // Массив arr, по индексу n
      let result = [];
      let new_arr = [];
      for (let i = 0; i < arr.length; i++) {
        if (new_arr.includes(arr[i][n])) result.push(arr[i][n]);
        new_arr.push(arr[i][n]);
      }
      return result;
    }
    Ответ написан
    1 комментарий
  • Как проверить массив на наличие пустых строк?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    arr.some(item => item === '')
    Или так:
    arr.some(item => !item)
    Во втором случае будут также находится все `null`, `undefined` и всё что приводится к `false`
    Ответ написан
    2 комментария
  • Как проверить массив на наличие пустых строк?

    MagnusDidNotBetray
    @MagnusDidNotBetray
    Самый елеустремленный человек
    json.includes('');
    Ответ написан
    Комментировать
  • В чем отличие схемы, модели и сущности?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Модель — некоторая абстракция того, что мы проектируем (моделируем):
    - или модель бизнес-абстракции, будь то сущности (платёж, товар, заказ) с состоянием или будь то бизнес-процессы (заказ товара, списание баланса за покупку, увольнение) без состояния или из совокупность
    - или модель данных/хранения (например изображений)
    - или модель чего угодно, что мы спроектировали, кроме инфраструктурных деталей и связующих с ними деталей (контроллеров к примеру), если это не базовая суть нашего кода

    Сущность — бизнес-модель, которая имеет явный идентификатор и своё состояние (конкретный документ, конкретный юзер, конкретный платёж, где конкретность обусловлена некоторым уникальным идентификатором)

    Схема — абстрактный план чего-то (связей или процессов к примеру)
    Ответ написан
    Комментировать
  • В чем отличие схемы, модели и сущности?

    Tomio
    @Tomio
    backend developer (python, php)
    Если я правильно понял то, что вы хотите узнать, то тут получается такая история.
    Модель - это описанный в коде объект, класс, который нужен для манипулирования на уровне абстракции. Модель служит обёрткой над сущностью. Вы просто описываете в ней все присущие ей свойства и методы (если они необходимы). К примеру, вы можете создать модель таблицы базы данных (унаследовавшись от какой-то базовой модели), в которой вы описываете все свойства (столбцы), уточняете их (столбцов) параметры и пр.
    Сущность - это то, что хранит модель, уникальный экземпляр, полученный из модели. То есть, если это была модель таблицы БД, то сущностью будет конкретная запись с первичным ключом.
    Схема - это связь моделей. То есть схема их взаимодействия. Если брать всю ту же модель таблицы БД, то если у нее появится внешний ключ на другую таблицу, то у них появится связь и схема взаимодействия между собой посредствам их моделей.
    Ответ написан
    Комментировать
  • Знание middle backend developer PHP?

    @0x131315
    База: ООП, базовые алгоритмы и структуры данных, умение гуглить.
    База для работы в команде: коммуникабельность, неконфликность, стрессоустойчивость.
    База по беку: php7, mysql, git, http, ssh, linux, phpstorm.
    База по фронту: html/css/js/ajax/jquery, работа с панелью разработчика в браузере.
    То, что отличает мидла от джуна, опыт: 2-3 года коммерческой разработки - основные проблемы с серверами, БД, сервисами, архитектурой, основные способы их решения, боль, примеры как не нужно делать, умение писать лаконичный, понятный, поддерживаемый код, библиотека готовых удачных решений (можно в голове, главное понимать, почему лучше сделать так, а не иначе), решительность. Умение рассказать об этом опыте, о встреченных проблемах и найденных решениях - без этого оффера, само собой, не будет.
    Это то, что требуется почти везде.

    Бонусом будет gitlab, postgres, docker, unit-тесты, curl, rest, elastic, regexp, операции над множествами (для фильтрации/поиска/пересечений массивов данных). Всё это можно добрать по необходимости, но работу упростит и время сэкономит.

    Конкретный бек и фронт фреймворк не проблема добрать во время работы, под конкретный проект - документация есть.
    Но как минимум по одному нужно пощупать на беке и фронте, чтобы понимать общий принцип. Я бы рекомендовал symfony и vue, но это, конечно, не принципиально.

    На некоторых позициях фронта нет совсем, или заявляется, что нет фронта. Но как правило он там есть, и база по фронту лишней не будет.
    Фронта нет только на узких api-проектах, там только работа с curl и БД. Но если проект предоставляет личный кабинет, настройки - этот личный кабинет и формы настроек придется писать и поддерживать, а это фронт.
    В общем php без html почти не бывает, а html без css/js/ajax и подавно.

    Верстка скорее не нужна, чем нужна.
    На большинстве позиций в IT-компании базы по фронту достаточно, т.к. основную работу по вёрстке будут отдавать конкретно верстальщикам или фронту, от тебя максимум, что потребуется - точечно поправить какие-то мелкие баги верстки(поправить размер/цвет/текст), внедрить ajax, натянуть вёрстку, вывести данные, подключить стили/скрипты. База по фронту позволит серьезно сэкономить время, понимая 80% происходящего на фронте, выполнять работу быстрее за счёт намного более редкого обращения к вёртальщикам/фронтендерам, т.к. правки минутные, а бюрократия может занять дни.
    В непрофильных конторах заинтересованы в человеке-оркестре, чтобы за одну зарплату купить целый IT отдел. Но и зарплаты там намного меньше, чем в IT-компаниях, т.к. IT в непрофильных конторах не является основным источником дохода, а скорее идёт как довесок, без которого нельзя, но от которого хотелось бы избавиться. Так что требований будет больше: админ-фуллстек-дизайнер-менеджер за 30к.
    Ответ написан
    Комментировать
  • Есть ли сервис по предварительному просмотру веб страниц?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    chromium headless browser может вам зайти на страничку, и сгенерировать ее скриншот.
    Ответ написан
    9 комментариев
  • Для каких задач Node.js является более приоритетным выбором среди других платформ?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Базово:
    Нода - это одноклиентский локальный бэк, который позволяет работать с "облачными" ресурсами в глобальной сети.

    Кратко: для задач построения распределённых вычислительных кластеров.

    Например, есть туча разных компов/серверов (рядом, или удалённых) и много-много разных задач.
    Требуется заюзать все доступные ресурсы оптимальным образом и обеспечить отказоустойчивость такой сети.

    Ну, или когда нужно быстро создать красивое приложение, взаимодействующее с удалённым веб-сервером: https://nwjs.io/

    PS: для тех, кто считает PHP аутсайдером по производительности: читайте.
    Ответ написан
    6 комментариев
  • Как развернуть копию контейнера с сохранением состояния?

    По-хорошему лучше монтировать в докер-контейнер volume с данными: держать данные отдельно от движка.
    docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    
    ### или создать дата-volume и его приделать к контейнеру
    docker volume create data_volume
    docker run --name some-mysql -v data_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    ### так после выключения контейнера данные не пропадут, останутся в этом data_volume, 
    ### который можно скопировать, подключить к другим контейнерам

    Но, тем не менее:

    Вариант 1.
    Экспортировать в папку на хосте данные из базы с помощью mysqldump или какая там у вас база. Бэкапы, в любом случае, делать необходимо. Поднять копию контейнера, импортировать в неё данные из дампа. Примеры команд для mysql в docker см. внизу в секции Creating database dumps:
    ### Creating database dumps
    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
    
    ### Restoring data from dump files
    docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql


    Вариант 2.
    Сохранить текущее состояние контейнера через docker commit — получится новый образ со всеми изменениями. Запустить его как копию.
    Ответ написан
    3 комментария
  • PUT & POST при написании API

    Yeah
    @Yeah
    Кратко: POST — создание, PUT — обновление
    Авторитетного источника применительно к REST не будет, так как REST, строго говоря, не определяет ни POST, ни PUT. REST просто допускает использование HTTP. Следовательно наиболее авторитетный источник по поводу POST/PUT — это спецификация HTTP 1.1:

    The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.

    The PUT method requests that the enclosed entity be stored under the supplied Request-URI.

    То есть POST используется для создания подчиненной сущности, а PUT для сохранения сущности.
    POST в случае успеха всегда должен возвращать статус 201 (Created) и Location на новый ресурс.
    PUT же может возвращать как 201 (если ресурс не найден), так и 204 (No Content) — если ресурс обновлялся.
    Ответ написан
    1 комментарий
  • Можно ли как-нибудь записать короче?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Так скопирует только выбранные свойства:
    this.configDb = (({ user, password, connectString }) => ({ user, password, connectString }))(c);

    Источник
    Тест
    var c = {
          user: "User",
          password: "Password",
          connectString: "Connect String",
        };
    var configDb = (({ user, password, connectString }) => ({ user, password, connectString }))(c);
    
    console.log(configDb)
    // Object { user: "User", password: "Password", connectString: "Connect String" }
    Ответ написан
    4 комментария
  • Можно ли как-нибудь записать короче?

    Seasle
    @Seasle Куратор тега JavaScript
    Если судить по коду, то this.configDb = c;. Если это какой-то метод (функция), то можно сделать нечто подобное
    class Some {
    	constructor() {
    		this.configDb = {
    			user: null,
    			password: null,
    			connectString: null
    		};
    	}
    
    	static required(name) {
    		throw new Error(`Argument ${name} is required`);
    	}
    
    
    	setConfig({
    		user = Some.required('user'),
    		password = Some.required('password'),
    		connectString = Some.required('connectString')
    	}) {
    		this.configDb = { user, password, connectString };
    	}
    }
    
    const some = new Some();
    some.setConfig({
    	user: 'John',
    	password: 'qwerty',
    	connectString: 'example.com'
    });
    console.log(some); // { configDb: { user: 'John', password: 'qwerty', connectString: 'example.com' } }
    some.setConfig({
    	password: 'root'
    }); // Error: Argument user is required


    Код для примера. Самое важное находится в методе setConfig. Если просто setConfig({ user, password, connectString }). И какой бы объект не передали в функцию, она получит только эти 3 аргумента.
    Есть хорошая статья из учебника по JS.
    Ответ написан
    Комментировать
  • Как сменить аккаунт GitHub?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Эх, можно было бы как-то красиво переключать аккаунты между собой

    Можно сгенерировать personal access token (на гитхабе -- settings пользователя -> developer settings -> personal access tokens -> generate new token) для другого аккаунта и добавить remote для репозитория в который надо пушить с другого аккаунта с аутентификацией по этому токену. Например:
    git remote add user_a_at_b https://user_a:user_a_token@github.com/b/b.git

    добавит remote user_a_at_b, через который можно пушить в репозиторий b/b.git от имени пользователя user_a.
    Ответ написан
    1 комментарий
  • Как сменить аккаунт GitHub?

    SagePtr
    @SagePtr
    Еда - это святое
    Если под Windows - То через Панель управления -> Диспечтер учётных данных
    Ответ написан
    1 комментарий
  • Для чего нужны очереди?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Для управления, для контроля ресурсов, для того чтобы не городить огород из своих велосипедов, для Reduce Attack Surface (даже при банально ошибках), для различного масштабирования ... миллион причин
    Ответ написан
    2 комментария
  • Как называется лингвистический алгоритм по переводу утверждения в вопрос?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Тут вот, похоже что-то есть.
    Кратко: Метод генерации на основе текстового корпуса + метод генерации вопросов по шаблонам.
    В помощь по извлечению "цепочек" из текстового корпуса могу предложить готовую функцию на PHP и/или этот список инструментов.
    Ответ написан
    2 комментария