• Enterprise и React. Где посмотреть примеры проектов?

    Ентерпрайз проекты как правило под NDA каким образом вам покажут их код?
    Если вам важно их наличие - они существуют, если какая то специфика - спрашивайте конкретнее.
    Ответ написан
    3 комментария
  • Как из JS сгенерить CSV файл для MS Excel?

    @vylegzhanin
    Замените это
    saveAs( new Blob( rows, {type : 'text/csv'}), 'data.csv' );

    на это
    saveAs( new Blob( rows, {type : 'text/csv;charset=utf-8'}), 'data.csv' );
    Ответ написан
    5 комментариев
  • Какие вы знаете способы выполнения тяжелых задач на node.js?

    @SeaBreeze876
    Front-end разработчик
    Самое очевидное - не использовать nodejs для подобных задач, оно предназначено исключительно для IO. Можно поставить рядышком сервис, не страдающий от проблем однопоточности, и использовать rpc.
    Ответ написан
    Комментировать
  • Чем опытнее разработчик, тем меньше соблюдается принцип KISS?

    Adamos
    @Adamos
    Чем опытнее разработчик, тем чаще, выполняя конкретную задачу, он понимает, что примерно такую уже решал. Поэтому опытный разработчик видит уровни абстракции, общие для многих решений. И описывает их так, чтобы потом, при решении очередной конкретной задачи, использовать написанное ранее с минимумом дополнительных усилий.
    Вы, не имея такого опыта, просто не понимаете, что все эти лееры, провайдеры и трейты - прекрасная возможность написать две строчки и быть уверенным в их работе там, где вы угробите два дня на написание "простого" решения, а потом еще неделю будете отлавливать его глюки.
    Ответ написан
    6 комментариев
  • Как сделать рандом из массива с указанной вероятностью для элементов?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сложить все веса. Их сумма это 100%, «единица».
    Взять случайное число от 0 до 1.
    Спроецировать на ваш диапазон, посмотреть, куда попали.

    $sum = array_sum($a);
    $rnd = rand() / getrandmax(); // от 0 до 1
    $runningSum = 0;
    foreach($a as $k => $v) {
      $runningSum += $v / $sum;
      if ($runningSum >= $rnd) {
        $key = $k;
        break;
      }
    }
    if (!$key) $key = $k;
    
    echo "Выпало: " . $key . PHP_EOL;
    Ответ написан
    5 комментариев
  • Как быстро и эффективно прокачать скилы в верстке?

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

    Курсы, книги, менторы и т д - это, конечно, хорошо.
    Но самая реальная польза - сверстайте из psd 3-5-10 макетов pixel perfect. И без всяких бутстрапов. После энного макета постигните дзен и все поймете. И чем макеты будут разнообразнее, чем больше в них адаптивности и хитрых элементов - тем лучше. По непонятным моментам спрашивайте на тостере. А так, судя по опыту коллег, иметь "некоторые представления о css" и подгугливать можно до бесконечности.
    Ответ написан
    1 комментарий
  • Как сделать анимацию трансформирующую один элемент в другой?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Является ли желтая квадратная форма в конце анимации видоизмененной кнопкой или же это совершенно другой элемент разметки?

    По смыслу - это другой элемент. Если мы говорим про более-менее компонентный подход к верстке, то это должно быть очевидно. Кнопка - один компонент. Всплывающее окошко - другой компонент. Набросал небольшую заготовку:


    С такими анимациями можно долго играться, самое главное - проверить в конечном итоге кроссбраузерность. А то в хроме и FF работает, а в каком-нибудь IE всякое может случиться.

    P.S.: Но в целом - я голосую за реализацию таких вещей целиком на JS. Практика показывает, что в проектах с такими анимациями очень быстро собирается большое количество одновременно анимирующихся значений у большого количества элементов, которые нужно синхронизировать между собой. На CSS голова лопнет все это делать. И да, чем больше всего меняется в CSS-анимациях в единицу времени, тем выше шанс найти какой-нибудь редкий баг и долго ломать себе голову в поисках проблемы. Лучше уж взять какую-нибудь библиотеку вроде anime.js или любимый многими GSAP и использовать их.
    Ответ написан
    Комментировать
  • Прокомментируете тестовое на react?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Хотелось бы видеть в проекте использование redux. react+redux - это самый распространенный и востребованный стек в React разработке.

    2. Почему все хандлеры и состояния находятся в App, а не в Main? Как вы потом эту кашу собираетесь масштабировать? Переносите все, что связанно только с Main в Main. По-хорошему смотрите пункт 1.

    3. Слишком много функциональных компонентов. Подумайте их где можно заменить на классы с реализованным shouldComponentUpdate или на PureComponent, чтобы убрать лишние вызовы render этих компонентов.

    4. import Logo from 'images/Logo.png';
    называть пути к ресурсам с заглавной буквы неправильно.

    5. Вместо:
    const StyledLogo = styled.img.attrs({
      src: Logo,
      alt: 'Aviasales'
    })`
      width: 60px;
      height: 61px;
    `;

    Удобней в использовании:
    const StyledLogo = styled.img`
      width: 60px;
      height: 61px;
    `;

    и:
    <StyledLogo src={logo} alt="Aviasales" />

    6.
    const Error = ({ text }) => (
      <StyledError dangerouslySetInnerHTML={{__html: text}} />
    );

    зачем тут html?
    Для сохранения переносов строки есть css правило:
    white-space: pre-line;

    7. Вместо:
    let element;
    
    if (error && !isLoading) {
      element = <Error text={error} />;
    }
    if (!error && isLoading) {
      element = <Loader />;
    }
    if (!error && !isLoading) {
      element = (
        <>
        <Heading />
        <Main
        isCurrencyExchanging={isCurrencyExchanging}
        activeCurrency={activeCurrency}
        handleCurrencyChange={this.handleCurrencyChange}
        ticketsFilteredByStops={ticketsFilteredByStops}
        stops={stops}
        handleStopsChange={this.handleStopsChange}
        handleUncheckOther={this.handleUncheckOther}
        />
        </>
      );
    }
    return element;

    Лучше:
    if (isLoading) return <Loader />;
    
    if (error) return <Error text={error} />;
    
    return (
      <>
        <Heading />
        <Main
          isCurrencyExchanging={isCurrencyExchanging}
          activeCurrency={activeCurrency}
          handleCurrencyChange={this.handleCurrencyChange}
          ticketsFilteredByStops={ticketsFilteredByStops}
          stops={stops}
          handleStopsChange={this.handleStopsChange}
          handleUncheckOther={this.handleUncheckOther}
        />
      </>
    );


    8. Вместо:
    filterTickets = (tickets, stops) => {
      return tickets.filter((ticket) => {
        return values(stops).indexOf(ticket.stops) !== -1;
      });
    };

    Лучше:
    filterTickets = (tickets, stops) => tickets.filter(
      ticket => values(stops).includes(ticket.stops),
    );


    9. Не пропускайте отступы между методами и между вложенными свойствами css.

    10. Вместо:
    componentsDidMount() {
      // много кода
    }


    Лучше:
    componentsDidMount() {
      this.fetchSomeData();
    }


    11. Директории и индексные файлы для каждого компонента, имхо, лишнее. Лучше компоненты определять в одноименном файле и только когда возникнет необходимость в его декомпозиции, заменять на директорию и index.

    12. Loader и Error самое место в директории components/core или что-то вроде того. Там же, по-хорошему, должны находиться базовые компоненты: кнопки, инпуты, табы, чекбоксы.

    13. Styled компоненты, имхо, лучше писать в файле с компонентом, где они применяются. Так анализ кода происходит гораздо быстрей и легче поддерживать. Исключение - переиспользуемые компоненты.
    Даже если вам больше нравится выносить, называть файл style неправильно, вы там описываете компоненты, а не просто стили.
    Ответ написан
    3 комментария
  • Как пройти и собеседование и не спалиться?

    theemfs
    @theemfs
    Кратко о себе
    Можно предупредить руководителя, что ты сходишь на собеседование ради спортивного интереса, узнать что, как сейчас на рынке. Ложь, в случае её выявления, может очень сильно навредить. А скрыть, возможно, не удастся.
    Ответ написан
    2 комментария
  • Как можно шифровать данные в базе данных MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Шифровать данные смысла нет. По шифрованным данным не будет нормально работать индексация. К тому же, если кто-то сольёт всю базу, то, скорее всего, он получит и ваши скрипты, которые шифруют/дешифруют данные при работе.
    Ответ написан
    7 комментариев
  • Как можно шифровать данные в базе данных MySQL?

    @mefutu
    Присоединяюсь к предыдущим ответам. Даже если вы и решите данные шифровать, то прежде всего подумайте, как сильно просядет ваша производительность, ведь шифровка/дешифровка- операции совсем не бесплатные. И смысл весь теряется в этом, если отправлять вы их будете в открытом виде. Лучше подумайте, как защитить канал передачи.
    Используйте api промежуточный сервер с разделенными ролями, а сам сервер с бд спрячьте за этой прослойкой, в таком случае вам и шифровать ничего не прийдется.
    Ответ написан
    4 комментария
  • Как применять знания javascript?

    @Berry90
    codewars.com самое то, сегодня как раз решал задачу надо было сортировать по числам в строках
    let str = "is2 Thi1s T5est 3a";
    делал на скоряк получился такой говнокод
    function order(words) {
    		let arr2 = new Array(4);
    		if (words == "") return "";
    		let arr = words.split(" ");
    		
    		for (let i = 0; i < arr.length; i++) {
    			for (let k = 0; k < arr[i].length; k++) {
    				if (!isNaN(arr[i][k])) {
    					arr2[arr[i][k]] = arr[i];
    				}
    			}
    		}
    		arr2.shift();
    		console.log(arr2.join(" "));
    	}
    	order(str);


    потом глянул на профи
    console.log( words.split(' ').sort((a, b) => a.match(/\d/) - b.match(/\d/)).join(' ') )


    у меня вышло 290 символов, профи тоже самое решил всего за 90
    вот так и тренируешься
    Ответ написан
    1 комментарий
  • Как мне быть в такой ситуации.Куда двигаться дальше?

    Хреновое у тебя настроение, 33 для програмиста не возраст, мне 42 и я несколько раз проходил путь от джуна до синьора, просто для встряски мозгов, последний раз менял специализацию в 39. Делай упор на английский, с хорошим английским работы море, при чем на удаленке платят больше чем на аутстаффе, правда и риски больше, кстати чтобы устроится на мидла, не запись в трудовой нужна "работал джуном год", а фактическое количество собранных граблей на технологии, на которые ты второй раз не наступишь, на собеседованиях просто спрашивают по матрице, поэтому необходимые навыки ты легко можешь узнать, просто регулярно проходя собеседования и подчитывая и реализуя то, на чем завалился. Завалив собеседование ты не ЧСВ должен понижать, а просто понимать, что ты узнал, что нужно доучить и идти на следующее собеседование.
    Ответ написан
    Комментировать
  • Какие нюансы работы на удаленке?

    @m0nym
    Сейчас в поиске работы. В моем небольшом городе с ней не очень здорово
    но при этом:
    Навскидку смущают такие моменты

    "Жрать нечего, но я нос ворочу".
    Все упирается только в вашу оценку того, насколько у вас все плохо.

    3. наставничество видимо тоже будет затруднено?

    И затруднено и маловероятно. Всем нужен готовый спец.
    Нет особого смысла нанимать вас если можно нанять другого более квалифицированного также по удаленке
    Ну разве что наймут за совсем копейки.
    Изредка бывает, более эффективно, когда ты уже более-менее квалифицирован. Но начинать с нуля по удаленке - плохая идея.
    Ответ написан
  • Какие нюансы работы на удаленке?

    rockon404
    @rockon404
    Frontend Developer
    1. Можно на белую, можно работать как ИП.
    2. Реально. Где-то еще и премии платят. Многие компании оплачивают отпуск/больничный/выходные сотрудникам работающим через ИП.
    3. Можно обсуждать задачи через Google Meet или в Slack. Код ревью.

    Какие еще подводные камни могут быть у такой работы?

    В нормальной компании никаких.
    Ответ написан
    23 комментария
  • Источники вдохновения для Front End разработчика?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Таки фишки придумывает дизайнер, а разработчик только верстает то что придумал больной мозг дизайнера
    Ответ написан
    7 комментариев
  • Как пишутся динамические многопользовательные игры на html5?

    Oniestel
    @Oniestel
    Если в общих чертах, то всю или почти всю логику игры имеет смысл считать на сервере. Там же всё это дело синхронизировать. Клиент же, в свою очередь, только получает текущее состояние игры с сервера, отрисовывает его и передает на сервер действия пользователя.

    Для отрисовки на клиенте лучше всего использовать Canvas/WebGL. Проще это делать с помощью готовых игровых движков или графических библиотек (например Phaser или Pixi.js). Для передачи данных на сервер и обратно в реальном времени, стоит использовать WebSockets.
    Ответ написан
    Комментировать
  • Фриланс и налоги, стоит ли платить?

    @RadmirZ
    Делаем интернет-магазины на движке minicart.su
    Открывайте ИП и платите ПФР и принимайте безнал, с него будете платить 6% (за вычетом ПФР) - и ваша жизнь очень упростится.
    Ответ написан
    4 комментария
  • В чем практическая польза итераторов в JS?

    search
    @search
    мама говорит что я особенный
    Полезность итераторов в том что это открытый интерфейс для любой структуры данных. Как вы уже поняли, любой класс/объект в JS может обладать интерфейсом итератора. Идея итератора в том чтобы скрыть внутреннее представление структуры данных от потребителя этих данных. Например, если вы работаете с какими-либо замысловатыми структурами данных, типа бинарных деревьев. Пользователю совсем не обязательно знать как ваш класс/объект хранит бинарное дерево. Пользователь просто его получает и проходит по всем его элементам в цикле. В дальнейшем, вы можете, при необходимости, заменить одну структуру данных на другую, не меняя самого пользователя. Например, вы можете заменить бинарное дерево на б-дерево прозрачно для самого пользователя (пользователь не будет знать что вы подменили структуры, он по прежнему получает что-то что можно проитерировать и ему этого достаточно).

    Для того чтоб глубже понять суть вопроса, можно погуглить про инкапсуляцию и SOLID (в вашем случае, принцип Open/closed).
    Ответ написан
    1 комментарий
  • Какова суть генерации своих событий в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробую на пальцах объяснить.

    Событие – это конверт, на котором написано его название. Внутрь конверта можете вложить что-нибудь, а можете оставить конверт пустым.

    Элемент – это столик. Кто угодно может подойти и положить на столик свой конверт.

    Слушатель – это мужик, который топчется около столика и смотрит, нет ли чего с интересующим его названием. Может несколько человек поджидать конвертики с определённым названием – прочтут все, если только в конверте не написано «по прочтении съесть» – тогда кто-то съест и дальше не передаст.

    Как создать/отправить конверт. В любом месте кода создайте конверт и дайте ему название: var myEvent = new Event('teaTime'); Остается положить конверт на нужный столик:
    document.getElementById('stolik').dispatchEvent(myEvent);


    Чтобы в событие вложить какие-то данные, нужно использовать другой конструктор и передать нагрузку в поле detail:
    var event = new CustomEvent('saySomething', { detail: "Hello there!" });


    Для чего нужно создавать свои события? Чтобы развязать куски кода. Например, в разных местах документа можно нажать на кнопку повторяющегося виджета. Виджет создаст на document событие "widgetClicked". А ещё несколько одинаковых компонентов в странице, слушающих document на предмет события "widgetClicked", получат пинок и что-нибудь вытворят.
    Ответ написан
    2 комментария