• В чем преимущества процессов над потоками?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Главное приемущество: независимость процессов. Потоки делят между собой одну память и ресурсы системы (всякие хандлеры в винде, например).

    Если один из процессов завершится или, что чаще происходит, упадет - остальные не будут затронуты. Плюс эта независимость позволяет делать песочницы для безопасности. Так, все современные браузеры запускают js и вообще каждую вкладку в отдельном процессе. Даже если куллхацкер полностью взломает браузер через специальный сайт, он окажется в процессе, который особо прав никаких не имеет, библиотеки особо интересные туда не загружены, а все общение с внешним миром - через жестко прописанные протоколы ipc (inter-process communication). Так что злодею придется взламывать еще и их.

    Эта же независимость позволяет выполнять работу даже после завершения основного процесса. Так, если вы хотите сделать автообновятор программы, то после скачки/установки нового приложения, надо будет перезапустить основное приложение, чтобы перезаписать исполняемый файл (по крайней мере в винде). Но поток завершится вместе с программой и кто же тогда потом будет ее запускать? А вот процесс останется работать.

    Недостатки тут - ресурсоемкость. С точки зрения системы поднять и поддерживать процесс гораздо больше работы чем сделать это с потоком. Плюс упомянутое выше ipc - это лишняя работа на каждый чих.
    Ответ написан
    Комментировать
  • Docker - как его понять новичку?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Docker - это не виртуализация. Это построенная на базе линуксовых namespace и cgroups средство изоляции процессов.
    Под Windows и Mac нет линуксовых namespace и cgroups поэтому приходится запускать контейнеры в виртуальной машине, что и создаёт путаницу.
    Ответ написан
    2 комментария
  • Хорошие учебники и справочники по математике?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Ответ написан
    Комментировать
  • Единая бд для апи и веба в docker?

    @tasiuk
    Для решения этой проблемы, нужно создать дополнительную сеть, с драйвером bridge, в стаке с сервисами к которым вы хотите предоставить доступ (подключиться).

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

    Пример:

    docker-compose.laravel.yml
    services:
        mysql: 
          image: ...
          networks:
             - default
             - my_private_network
    
        redis: 
          image: ...
          networks:
             - default
             - my_private_network
    
    networks:
      my_private_network:
        name: my_private_network
        driver: bridge


    docker-compose.lumen.yml
    php-fpm:
        image: ...
        networks:
          - default
          - my_private_network
    
    networks:
      my_private_network:
        external: true
        name: my_private_network

    - В первом стаке мы создаем новую сеть, и подключаем нужные нам контейнеры;

    - Во втором стаке мы объявляем о существовании сети которая была создана ранее, и так же подключаем наш php-fpm контейнер, к этой сети, что бы коммуницировать с другими контейнерами по сети;

    После этого, в стаке для Lumen вы можете смело подключиться к контейнерам mysql, redis по их алиасам, как и ранее:

    Lumen .env
    DB_HOST=mysql
    REDIS_HOST=redis


    Успехов!
    Ответ написан
    1 комментарий
  • AWS vs GoogleCloud vs DigitalOcean – как выбрать облако?

    inoise
    @inoise Куратор тега Amazon Web Services
    Solution Architect, AWS Certified, Serverless
    Итак, для начала DigitalOcean - НЕ ОБЛАКО. Это просто набор связанных сервисов. Зайти в DigitalOcean очень просто, выйти тоже, все понятно и прозрачно но там даже горизонтального масштабирования нет. Это слегка прокачанные те же VPS-ки.

    Теперь по всему остальному. Есть золотая троица AWS/Azure/GCP, но тут начинают играть другие правила.
    1. Стоит обратить внимание на то что им действительно надо учиться и это занимает время. Чтобы сделать решение, а не поделку и не влететь на деньги месяца не хватит ибо там очень много всего.
    2. Я могу сказать что переезд из одного облака в другой возможен при двух условиях: вы пользуетесь только базовыми сервисам (вроде виртуалок, БД, S3) и у вас есть 2 архитектора с сильным пониманием этих облаков
    3. Два архитектора по тому что я не знаю ни одного такого человека кто потратил достаточно сил и вник сразу в несколько облаков достаточно глубоко. Я был там везде и в результате все-равно остановился на AWS, хотя Azure и GCP имеют свои преимущества
    4. Про сервисы - ехать в облако и не пользоваться особыми сервисами и фичами этого облака - дорого и глупо
    5. А самое интересное что сделать и мигрировать проект проще чем обучить людей и изменить подходы к прайсингу
    6. Миграция в облако и из облака - не делается по щелчку пальцев, особенно если есть много данных


    По AWS могу поделиться гайдами как туда ехать, да и у них Cloud Migration очень понятный раздел с документацией. Если сравнивать эти облака то:
    • AWS - serverless, cutting-edge solutions, прозрачная инфраструктура
    • Azure - экосистема от MS, прекрасный CosmosDB (но это скорее про цены)
    • GCP - глобальные ресурсы, BigData

    При этом большинство этих фич в том или ином виде есть в других облаках.

    И маленькая ремарочка по k8s. Если вы едете не в GCP то он вам не нужен. AWS и Azure сделали так что вы можете его туда удобно загнать, но это будет дороже. Тот же AWS ECS + Fargate куда удобнее и я не знаю тех System Engeneer что по собственному желанию пересаживались с этого на k8s
    Ответ написан
    8 комментариев
  • Какую выбрать книгу для изучения JavaScript?

    @yestodev
    Дам совет от себя, как новичка от мира JS.
    Могу посоветовать не книги, а скорее решение математических задач. :)
    Прям берем любой вопрос, от простого до сложного и решаем, желательно разными методами:
    Сортировки, факториалы, площади, матрицы, что угодно, в порядке усложнения.

    Т.е. нужно сперва заставить себя мыслить на языке (тут очень неплохо подходит такое объяснение: ты хорошо знаешь иностранный язык, когда ты мыслишь на этом языке непроизвольно) и как можно больше писать, обращать внимание на суть написанного, а не искать "а где же тут { закрывается".
    Брать хорошие и интересные решения других людей и разбирать их, научиться читать код и вникать в то, что он означает.

    И самое главное ни в коем случае не читать книг по типу "построй свой отзывчивый сайт", "как создать интернет-магазин" и прочий мусор от мира компьютерной литературы. Уметь программировать !== знанию отдельных инструментов одного конкретного языка.

    Ставим себе задачу: я хочу сделать так, чтобы весь текст на страничке после "." разбивался на абзацы. Пытаемся решить самостоятельно, гуглим, вникаем в решение других (если не получилось самому), пытаемся изменить задачу и решить самостоятельно. Решили задачу - едем дальше, ставим новую.
    Этот процесс даст очень много понимания в начале пути, а потом можно уже и Флэнаганов читать, подправлять знания в правильное русло.

    Так же неплохо найти ментора с опытом, который будет исправлять ошибки (т.к. это основная проблема самостоятельного обучения - можно научиться делать не только правильно, но и неправильно).

    А, ну и побольше математики, правда. Решение математических задач обусловлено строгой логикой, это очень помогает! Вспоминаем (например) как искать площадь треугольника сперва на бумаге, потом пишем это в IDE.
    Это более долгий путь, но как по мне, так он более основательный.
    Ответ написан
    3 комментария
  • Каким путем выучить современную верстку с 0?

    Garfields
    @Garfields
    Советую обратить внимание на курсы, которые я указал ниже.
    Обучение
    • Джош Кауфман «Первые 20 часов. Как научиться чему угодно... быстро»
    ru.learnlayout.com
    htmlacademy.ru/program
    w3schools.com
    flexbox.ninja
    Карта развития веб-разработчика

    Видеокурсы HTMLAcademy
    • htmlacademy «Базовый HTML и CSS»
    coursehunters.net/course/bazovyy-html-i-css-18-2017
    • htmlacademy «Продвинутый HTML и CSS»
    coursehunters.net/course/prodvinutyy-html-i-css-po...
    • htmlacademy «Профессиональный HTML и CSS Уровень 1»
    coursehunters.net/course/professionalnyy-html-i-cs...
    • htmlacademy «Профессиональный HTML и CSS Уровень 2»
    coursehunters.net/course/professionalnyy-html-i-cs...

    Справочники
    htmlbook.ru
    webref.ru
    developer.mozilla.org/ru/

    Выполнение заданий
    flukeout.github.io (изучение селекторов в CSS)
    flexboxfroggy.com/#ru (изучение flexbox в CSS)
    flexboxdefense.com (изучение flexbox в CSS)
    dmitrylavrik.ru/training/process/flexbox-grid (создание сетки на flexbox)
    cssgridgarden.com/#ru (изучение gridbox в CSS)

    Задачи для практики:
    htmlbook.ru/practical

    Макеты для практики:
    drive.google.com/drive/u/0/folders/0B8LYygUI_oGeSG...
    freebiesbug.com/psd-freebies/website-template/
    symu.co/freebies/templates-4/
    dcrazed.net/free-photoshop-psd-website-templates/
    Ответ написан
    5 комментариев
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Что написать для тренировки на js с нуля?

    @vazonov
    Javascript developer
    Смотря сколько времени хотите потратить.
    Можно создать проект с нуля. Например, сервис для хранения собственных заметок. Определяете цели, которые будет выполнять приложение (создать заметку, удалить, редактировать, искать по категории). Можете и API написать (welcome to node.js), если хотите сохранять заметки на сервере. Не хотите писать API - можете использовать другие сервисы, которые дадут возможность делать "серверную" работу за Вас, Вам лишь надо с ними "общаться" с клиентской стороны (например, Google Firebase). Если не хотите и этого - можно сохранять заметки локально в браузере (localStorage, IndexedDB). Создавая проект Вы и столкнетесь с написанием и модалок, и кнопок, и пагинации, и очень много всего другого, что пригодится в реальной работе.
    Еще варианты:
    - Приложение для хранения просмотренных фильмов (и фильмов, которые хочется посмотреть. Впечатления, личная оценка)
    - PWA приложение, которое копирует функционал какого-то мобильного приложения (смотрите Google Play, AppStore)
    - API, которое будет выдавать сгенерированные (фейковые) данные (faker.js)
    - WhatApp / Viber / Telegram / Facebook bot для отправки актуальной погоды / курса валют, пр.

    Можете написать то, что пригодится Вам. Например, телеграм бот, который бы присылал Вам новинки фильмов, которые появились на торрентах. Это node.js.

    Можете написать игру на canvas. Можете не на canvas. Просто JS + CSS.
    Еще Варианты:
    - 2048
    - Лабиринт, где что-то куда-то двигается
    - Угадай число (скрипт "загадывает" число, ты вводишь свое - он тебе говорит, больше оно или меньше и пока не угадаешь)
    - Любая другая с использованием популярных js-движков для игр (https://github.com/collections/javascript-game-engines)


    Можете переписать какую-то JS-библиотеку (смотрите на Гитхабе).
    Можете написать свою библиотеку. Начните с малого: допустим, она будет генерировать случайные строки. Или имена, фамилии и эмайлы.
    Еще варианты:
    - Редактор текста
    - Проверка паролей на устойчивость
    - Валидация (паролей, имен, фамилий, телефонов, эмайлов) - привет, регулярные выражения
    - Генерация случайных пикселей на canvas
    - Библиотека-helper: пишете свои функции-велосипеды при работе с данными (спарсить json, склонировать объект, пр.)


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

    shmatuan
    @shmatuan
    8 year of Web, 5 years of Vue
    Из того, что часто может пригодится в вебе

    • Паралакс
    • слайдер
    • генерацию таблиц из js
    • сортировку таблиц
    • общение с сервером
    • Плеер (аудио/видео)
    • Работа со временем (momentjs)
    • Подгрузка постов при скроле
    • Движение блоков при скроле
    • Пагинация
    • Модалка
    • Взаимодействие с изображениями (фильтр, обрезка, ...)
    • Кастомные селекты, датапикеры
    • Табы


    + можешь поискать топ сайтов и попробовать повторить интересные штуки из них
    + jQuery
    + фрейморки, например Vue
    + node js
    Ответ написан
    Комментировать
  • Целесообразно ли обучаться нынешнему node.js (10.12.0) по курсам для версии 0.10?

    Обучайся по документации. Самый верный способ узнать, что есть язык \ технология, и из чего она состоит.
    Ответ написан
    2 комментария
  • Что делать, если выключили свет при форматировании HDD?

    Jump
    @Jump
    Системный администратор со стажем.
    Надо смотреть что SMART пишет, а вообще-

    diskpart
    list disk ищите номер нужного диска
    sel disk выбираете нужный диск
    clean
    После чего инициализировать и запустить форматирование без галки "быстрое"
    Если пройдет нормально - с диском все в порядке
    Если нет - менять надо.
    Ответ написан
  • Куда поступать после 9 класса мобильному разработчику?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Функционал его крайне мал

    несколько кнопок и разные списки

    пока все логично
    Я уверен, что его скачают минимум 100к раз

    разрыв логики

    Много видел, что берут на работу со стажем, а не после какого то обучения.

    Game Maker точно никому не интересен, да и 9-ти классники которые умеют сделать "несколько кнопок" тоже не особо, тем более если они уверенны, что то что они сделали кому-то нужно.

    Мой совет - идите в 10-й класс и продолжайте глубже разбираться в том что делаете. Вы сверху зацепили тему, даже не погрузившись на 1-2% в тему, а уже считаете себя успешным разработчиком. Вы соберите 100k скачиваний, потом рассказывайте об этом.
    Ответ написан
    Комментировать
  • Chmod -R 777 / или как я убил систему одной командой?

    @Reversaidx
    Системные права чинятся за пару минут, ставишь виртуалку с такойже ОС, дампишь права(читай getfacl), и расскатываешь права.
    Если есть бекапы сервера то вообще всё замечательно, просто делаешь тоже самое с бекапа
    Ответ написан
    1 комментарий
  • Как мне быть в такой ситуации.Куда двигаться дальше?

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

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Начните с гугла. На тостере подобных вопросов было несколько сотен.

    Без умения пользоваться поиском вам вообще не стоит заниматься самостоятельной работы, потому что работая на дядю, дядя берет на себя кучу рисков - что вы не справитесь, что вы не найдете клиента, что вы не поймете как вообще пользоваться paypal и обналичить деньги, что вы не сможете адекватно понять сколько по пути обналичивания будет налогов и останетесь на нуле без еды.

    На фрилансе главная задача - уметь быть САМОСТОЯТЕЛЬНЫМ, а вы даже начать сами не можете.
    Ответ написан
    Комментировать
  • Как можно упростить выражение?

    Jeer
    @Jeer
    уверенный пользователь
    Могу предложить:
    if(placement=='top' && coords.top < 0
       || placement=='right' && coords.right > width
       || placement=='bottom' && coords.bottom > height
       || placement=='left' && coords.left < 0)
              placement = this.placementArr[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 комментария
  • Как лучше установить Linux для проведения практического курса по нему?

    mmmaaak
    @mmmaaak
    Установить чистый линукс в виртуал бокс, скопировать куда-нибудь файлы виртуальной системы, после работы с линуксом в виртуал боксе сносить использованный нафиг и брать заранее сохраненную копию
    Ответ написан
    1 комментарий
  • Как работать в команде с настройками и форматированием кода?

    rockon404
    @rockon404
    Frontend Developer
    Ерунда какая-то. Добавляете в репозиторий проекта конфиги .eslintrc или tslint.json, добавляете lint-staged и прекоммит проверку. Этого должно хватить.
    Ответ написан
    Комментировать