Задать вопрос
  • Путь в быдлокодеры или как стать программистом с 0?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1) Я упорно отказываюсь называть верстальщиков - программистами.
    На 90% это тупая низкооплачиваемая работа, никакого отношения к программированию не имеющая
    Исключения есть, но не много.
    Для того что бы стать web backend программистом - знания верстки нужны самые минимальные (читай - не нужны вообще, но в процессе все равно появятся), зато нужно например sql которого в вашем списке нет почему то.

    2) Если хочется денег и нет отвращения к дресс-коду - можно пойти в java разработчики.
    По деньгам выиграете заметно, но это в 99% enterprise со всеми вытекающими.

    3) Если хочется денег и свободы - можно пойти в разработчики ios/andoid на выбор.
    Самый правильный вариант если с нуля выбирать профессию.
    Кадровый голод в сфере дикий, в dc берут с 0ми знаниями на неплохие деньги.

    Imho самый правильный вариант для Вас - второй или третий.
    Становиться верстальщиком сейчас - явно не самая хорошая идея.

    UPD
    PolzuizYami: Что за enterprise и что за вытекающие? )
    Какой порог входа для разработчика под мобилки и через сколько я смогу показать результат и что то за это начать получать ? Почему вы не любите fronted? ) И почему становится fronted'ом не лучшая затея(на верстке я как бы не собирался останавливаться, но это основа основ для fronted'a)?

    Enterprise - работа или в крупной компании или в аутсорсере который работает на крупную не IT компанию. Вытекает из этого определенный уровень бюрократии, чинопочитания, формализма, дресскода и прочего, что в какой то мере компенсируется кешем и стабильностью™.
    Опять же не всюду, но очень много где.

    Порог входа для мобильной разработки сейчас достаточно низкий, 0-1-2 месяца самостоятельной практики и можно идти на вакансию junior, в dc платят 40-50 на старте, за год-два можно выйти на 150-250+ с учетом фриланса.

    По поводу фронтенда:
    Сразу небольшой дисклеймер:
    a) не хочу никого обидеть, пишу исходя из личного опыта. b) это справедливо не для всех проектов.

    Итак:
    1) В отличии от backend - сложность и объем задач по frontend не зависит от размера аудитории проекта.
    2) В отличии от backend - работы по frontend выполняются быстро и в отсутствии требований по изменениям - доработкам не подвергаются.
    3) В отличии от backend - текущая работа по frontend сильно менее связана с прошлыми этапами работы, либо погружение в проект требует не много времени (не всегда, но часто)
    4) Следствие из 1, 2, 3: Для запуска развития среднестатистического проекта нужны backend разработчики в команду (штат/длительный аутсорс) и не нужны frontend разработчики в команду (проще и дешевле брать фрилансеров под конкретные задачи)
    5) Вывод: Путь верстальщика это в 90% либо короткая дешевая работа на фрилансе, либо работа в штате по поддержке постоянных маркетинговых хотелок (подвиньте банер на 20px в бок, итд), либо в очень редких случаях - действительно сложные, нагруженные с точки зрения frontend проекты.
    Почему в редких случаях? Потому что таких проектов очень мало :) (и кстати многие из них - enterprise)

    UPD-2
    По поводу мобильной разработки:
    Куда пойдет mobile dev через 5 лет - предсказать сложно. На мой взгляд основная масса проектов сейчас достаточно простая и для успешной реализации требует монотонной аккуратной работы (70-80% времени это собирание верстки и анимаций, подключения к внешним апи). Адские зарплаты сейчас обусловлены дикой нехваткой людей. Но есть мнение что пик уже прошел.
    С другой стороны появляются новые мобильные платформы - и разработчики нужны уже под них) Непрерывный процесс саморазвития как он есть)

    UPD-3
    Собственно, почему Веб ,а не мобильная или Java. Ориентировался чисто по вакансиям своего города, к сожалению живу не в DC и да же не в DC2, а наверно DC 666 (Владивосток).
    Вся прелесть бытия IT специалистом - в нашей широкой востребованности. Не нужно ориентироваться на свой город, да и на DC по большому счету не стоит. Перед тобой вся планета.
    да и маме сайт сделаю
    ппц мотивация для выбора жизненного пути.
    Ну а про потолок верстальщика - я расписал ниже.
    Ответ написан
    28 комментариев
  • Где скачать хороший учебник по математике?

    globuzer
    @globuzer
    gezgrouvingus progreszive ombusgrander greyderzux
    Начиная с 5-ого класса, самый лучший и классический учебник для монстров математики, это любой сборник задач под редакцией Сканави. Есть с решениями, есть без. Есть просто задачи, есть задачи для поступающих в ВУЗы, есть олимпиадные задачи, есть голимая теория.
    Все книги этого автора являются неоспоримым подготовительным уровнем по математике школьника, кто как-то видит себя в будущем, связанным с математическими науками.
    А нынче жизнь такова, что все перспективные технологии, профессии, науки, все что пользуется спросом, - было, есть и будет связано с математикой. Сканави - маст хэв!

    Дополнено:
    Может быть они слишком сложны для современной программы? Сейчас в школах на курсах углубленного изучения математики не дают того объема, что давали раньше и на обычных курсах школы. Все это спорно. Школы разные, требования разные.
    Но математика остается математикой, в сборниках Сканави (еще советских изданий) как раз содержится базовый и монолитный фундамент достаточно СИЛЬНОЙ математической подготовки.
    Еще к ответу: читайте журналы КВАНТ, что выпускались в СССР, справочник Бронштейн, Семендяев, Корн. Сборники Данко и Кожевникова - инетересны будут для школьников старших классов и студентов первых курсов.
    На самом деле - в последнее время встречал столько современных сборников и учебников, а по базе знаний они уступают с теми, что были в СССР.
    Учите и любите математику в любых ее проявлениях, временах, учебниках.
    Тех знаний что вам не хватает, просто гуглите и ищите в других книгах и ресурсах интернета, в том числе и зарубежные сайты.
    Ответ написан
    5 комментариев
  • Как вырезать участок текста с помощью регулярных выражений?

    AngReload
    @AngReload
    Кратко о себе
    let r = /(((hostname)|(version)|(udp\/ip)|(map)|(players)).+\n)+[\n]+(#.+\n)+/g;
    let s = `Какой-то левый ненужный текст
    hostname: [v34] Территория
    version : 1.0.0.34/7 4100 insecure
    udp/ip : 46.174.50.125:55555
    map : aim_ag_texture_city at: 0 x, 0 y, 0 z
    players : 15 (24 max)
    
    # userid name uniqueid connected ping loss state adr
    # 224 "Deablo" STEAM_0:0:1541978496 23:00 81 0 active 83.234.93.14:27005
    # 207 "THE MAAAYYYOOORRR" STEAM_0:0:335595225 52:35 56 0 active 178.141.1.40:27005
    # 175 "G-SHOCK" STEAM_0:0:171410046 1:38:54 61 0 active 185.29.53.179:27005
    # 245 "B-[52]# НеПоКоРНыЙ" STEAM_0:0:1616617055 01:03 85 0 active 176.59.66.121:13535
    # 167 "TRIGGGER :x" STEAM_0:0:1921753392 2:07:48 103 0 active 46.133.16.5:58019
    # 231 "Ник" STEAM_0:0:123039129 14:06 47 0 active 94.19.171.241:27005
    # 194 "- t e q i l k a :j" STEAM_0:0:454570035 1:17:45 48 0 active 130.255.62.255:27005
    # 244 "Rays" STEAM_0:0:1636160806 03:06 56 0 active 92.38.71.70:12129
    # 227 "38_RUS Kasper_7463" STEAM_0:0:1591082612 19:15 106 0 active 185.54.179.144:48660
    # 228 "-_-Калыван-_-" STEAM_0:0:1418104875 19:08 58 0 active 92.38.68.26:4661
    # 240 "InTELLIGEnT" STEAM_0:1:787924836 05:50 70 0 active 37.212.5.246:28793
    Следующий ненужный текст...
    "
    
    Необходим вырезать оттуда именно этот участок:
    hostname: [v34] Территория
    version : 1.0.0.34/7 4100 insecure
    udp/ip : 46.174.50.125:55555
    map : aim_ag_texture_city at: 0 x, 0 y, 0 z
    players : 15 (24 max)
    
    # userid name uniqueid connected ping loss state adr
    # 224 "Deablo" STEAM_0:0:1541978496 23:00 81 0 active 83.234.93.14:27005
    # 207 "THE MAAAYYYOOORRR" STEAM_0:0:335595225 52:35 56 0 active 178.141.1.40:27005
    # 175 "G-SHOCK" STEAM_0:0:171410046 1:38:54 61 0 active 185.29.53.179:27005
    # 245 "B-[52]# НеПоКоРНыЙ" STEAM_0:0:1616617055 01:03 85 0 active 176.59.66.121:13535
    # 167 "TRIGGGER :x" STEAM_0:0:1921753392 2:07:48 103 0 active 46.133.16.5:58019
    # 231 "Ник" STEAM_0:0:123039129 14:06 47 0 active 94.19.171.241:27005
    # 194 "- t e q i l k a :j" STEAM_0:0:454570035 1:17:45 48 0 active 130.255.62.255:27005
    # 244 "Rays" STEAM_0:0:1636160806 03:06 56 0 active 92.38.71.70:12129
    # 227 "38_RUS Kasper_7463" STEAM_0:0:1591082612 19:15 106 0 active 185.54.179.144:48660
    # 228 "-_-Калыван-_-" STEAM_0:0:1418104875 19:08 58 0 active 92.38.68.26:4661
    # 240 "InTELLIGEnT" STEAM_0:1:787924836 05:50 70 0 active 37.212.5.246:28793 `;
    console.log(s.match(r));
    Ответ написан
    1 комментарий
  • Как вырезать строку начинающего с определённого символа?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    если правильно понял:
    console.log(`
    Текст
    # текст 2
    # текст "текст с #" 3
    # текст 4
    # текст 5
    `.match(/^#.*$/gm));
    Ответ написан
    1 комментарий
  • Как сделать личные сообщения на node js socket.io?

    Со стороны клиента передай jwt токен или куки (сессию). На стороне ноды напиши мидлвар, который в момент подключения обработает эти данные и запишет клиента.
    Например, так:
    const io = socket();
    
    io.use(async (socket, next) => {
    	try {
    		const { token } = socket.handshake.query;
    		const data = await verify(token);
    		socket.request.user = data;
    		return next();
    	} catch (err) {
    		// ignore
    		return next();
    	}
    })


    Теперь у тебя в объекте подключения есть данные пользователя и ты можешь отправить сообщение конкретному пользователю, найдя его соединение.
    Ответ написан
    4 комментария
  • Как этот код можно переписать в ES6?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    export class AuthError extends Error {
      constructor(message) {
        super(...arguments);
        Error.captureStackTrace(this, AuthError);
        this.message = message;
      }
    
      get name() {
        return 'AuthError';
      }
    }
    Ответ написан
    1 комментарий
  • Как отправить сообщение к конкретным пользователям?

    Aliansys
    @Aliansys
    Из документации socket.io (отправка сообщений)
    // отправить текущему сокету сформировавшему запрос (туда откуда пришла)
    socket.emit('message', "this is a test");
    
    // отправить всем пользователям, включая отправителя
    io.sockets.emit('message', "this is a test");
    
    // отправить всем, кроме отправителя
    socket.broadcast.emit('message', "this is a test");
    
    // отправить всем клиентам в комнате (канале) 'game', кроме отправителя
    socket.broadcast.to('game').emit('message', 'nice game');
    
    // отправить всем клиентам в комнате (канале) 'game', включая отправителя
    io.sockets.in('game').emit('message', 'cool game');
    
    // отправить конкретному сокету, по socketid
    io.sockets.socket(socketid).emit('message', 'for your eyes only');
    Ответ написан
    19 комментариев
  • Как переписать этот код в ES6?

    Node.js v8.12/10.11

    'use strict';
    
    const { STATUS_CODES } = require('http');
    // https://nodejs.org/api/esm.html#esm_enabling
    // import { STATUS_CODES } from 'http';
    
    class HttpError extends Error {
      constructor(status, message=STATUS_CODES[status]) {
        super(message);
    
        Error.captureStackTrace(this, this.constructor);
    
        this.name = this.constructor.name;
        // this.status = status;
        // https://nodejs.org/api/errors.html#errors_error_code
        this.code = status;
        this.message = message || 'Error';
      }
    }
    
    module.exports = HttpError;
    // export default HttpError;
    Ответ написан
    Комментировать
  • Как удалить второй текст div?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Оборачивайте текст в span'ы - тогда и проблем с удалением не будет.

    Ну или можно воспользоваться знанием того факта, что ваш текст представляет собой отдельные узлы DOM-дерева:

    const div = document.querySelector('.line');
    div.removeChild(div.childNodes[2]);
    
    // или
    
    document.querySelector('.line input').nextSibling.remove();
    
    // или
    
    document.querySelector('.line').lastChild.remove();
    Ответ написан
    1 комментарий
  • Не получается авторизация?

    @eloki
    Всего по-маленьку
    У вас опечатка в password_hash($data['passoword']
    Ответ написан
    1 комментарий
  • Как сделать так чтобы в массиве не было одинаковых элементов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Делаем нормально: [...new Set(arr)].

    И ненормально:

    Object.values(arr.reduce((acc, n) => (acc[n] = n, acc), {}))
    
    // или
    
    Array.from(new Map(arr.map(n => [ n, n ])).values())
    
    // или
    
    arr.filter(function(n) {
      return !(this[n] = this.hasOwnProperty(n));
    }, {})
    
    // или
    
    arr.filter(((picked, n) => !picked.set(n, picked.has(n)).get(n)).bind(null, new Map))
    
    // или
    
    arr.filter((n, i, a) => i === a.indexOf(n))
    
    // или
    
    arr.reduce((acc, n) => (acc.includes(n) || acc.push(n), acc), [])
    Ответ написан
    2 комментария
  • Чем отличается переменная среды development и production? И что это вообще такое?

    sM0kfyz
    @sM0kfyz
    Frontend dev.
    Это переменная, которая указывает какую версию проекта вы хотите запустить.
    development - для разработки
    production - для боевых условий
    И в зависимости от этого можно подключать различные плагины, компоненты, модули для упращения разработки (дебаггеры, hot reloaded и т.п.) А потом легко их отключать, поменяв переменную среды.
    Ответ написан
    Комментировать
  • Как сделать так чтобы бот в Discord писал первым? discord.js?

    amorphis
    @amorphis
    Технолог в Студии Артемия Лебедева
    Подписаться на событие guildMemberAdd, которое возникает, когда кто-нибудь заходит на сервер.
    Ответ написан
    1 комментарий
  • Пытаюсь подключить babel для react в html. Пишет File to load file:///D:/Programmes/Projects/Project1/scripts/script.js?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Думаю, пока лучшим вариантом для вас будет create-react-app или codesandbox.

    Сама проблема в том, что вы открываете документ в браузере, а не получаете с сервера.
    Ответ написан
    6 комментариев
  • Почему "e" - undefined?

    0xD34F
    @0xD34F
    throw PhraseError

    Где-то тут пропущен new. То же относится и к вызову HttpError.
    Ответ написан
    Комментировать
  • Почему "e" - undefined?

    rockon404
    @rockon404
    Frontend Developer
    Вы должны передавать оператору throw не конструктор, а инстанс ошибки:
    throw new PhraseError('Phrase is not defind' + name);
    throw new HttpError(404, "Page is not defind");
    Ответ написан
    1 комментарий
  • Как сделать такой пример как на гифке?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Горизонтальный full-width "аккордеон".
    drl-dribble-shot.gif
    Все слои уже загружены и в них спозиционированы фоновые изображения относительно контейнера. Фон - скрыт (прозрачность). Слои находятся друг рядом с другом (подобно забору) в виде вертикальных полосок на всю высоту контейнера.

    При наведении - нужный слой ставится выше предыдущего по z-оси: hover в виде вертикальной полоски с другим изображением и нужным.

    По клику - банальное масштабирование до полной ширины и затем предыдущий также сжимается в полоску с правильным позиционированием (находясь уже за текущим, поэтому этого не видно пользователю).
    Ответ написан
    Комментировать
  • Как компилировать в es6 coffeescript?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Последние версии coffeescript компилят в es6 по дефолту.
    Просто обновитесь.
    Ответ написан
    Комментировать
  • Как в sublime text 3 изменить табуляцию?

    turbinikarpus
    @turbinikarpus
    Тык сюды5b564f2eac590839100042.png
    Ответ написан
    Комментировать
  • Как в HTML JS проверять наличие какого-то нибудь слова?

    @antpv
    Рабочий пример:

    let input = document.body.firstElementChild;
        let arr = ['test']
    
        function findWord(input, arr, callback) {
            input.addEventListener('input', function (e) {
                arr.forEach(function(item, i, arr) {
                    if (input.value.indexOf(item) >= 0) {
                        callback(item);
                    }
                })
            })
        }
    
    
        function test(item) {
            alert(item)
        }
    
        findWord(input, arr, test)


    Вызываем функцию findWord
    Первый аргумент - input на котором проверять слова
    Второй агрумент - массив слов которые нужно проверить в input
    Третий аргумент - функция которая будет вызвана в случае если найдено слово, эта функция получит в качестве первого аргумента слово которое было найдено
    Ответ написан
    1 комментарий