Задать вопрос
  • Где можно пройти хорошие онлайн курсы по DevOps?

    thiago_alvarez
    @thiago_alvarez
    Student
    Мне кажется девопсом становятся только на практике
    Ответ написан
    Комментировать
  • Как сделать такой прогресс бар?

    orlov0562
    @orlov0562
    I'm cool!
    Сделай у картинки прозрачность там где белый путь, потом под неё поставь желтый прямоугольник и двигай его вправо с помощью css



    Человека просто выравняй по правому краю желтого прямоугольника
    Ответ написан
    5 комментариев
  • На чем сделан сайт?

    e_snegirev
    @e_snegirev
    В исходниках страницы указано

    <meta name="generator" content="Web Presence Builder 17.0.16">
    Ответ написан
    Комментировать
  • Доказательство, множества решений?

    15432
    @15432
    Системный программист ^_^
    достаточно показать, что любое решение из C является либо решением из A, либо решением из B.
    Для четных n=2k получаем x = pi/2*(2k) = pi*k, k - Z, принадлежит множеству A
    Для нечетных n = (2k+1) получаем x = pi/2*(2k+1) = pi*k + pi/2, k - Z, принадлежит множеству B.
    Доказано (достаточность)

    Так, для равенства множеств ещё в обратную сторону надо показать, что решения из A и B принадлежат C, но там проще
    A: x = pi*n = pi/2 * (2n) = pi/2 * k, k - Z
    B:x = pi/2 + pi*n = pi/2 + pi/2*(2n) = pi/2 * (2n + 1) = pi/2 * k, k - Z
    Доказано (необходимость)
    Ответ написан
    Комментировать
  • Над чем нужно работать, что улучшать?

    DarthJS
    @DarthJS
    Добавлю. Вы работаете с Реактом, но при этом просто повставляли темплейты, что не имеет смысла, вы там можете взять абсолютно любой фреймворк и вообще без фреймворка закинуть темплейты и понавешивать хендлеры. Темболейт нужно разбивать на компоненты, в которые вы прокидываете данные через props, а так у вас много повторяющегося html
    Поставьте линтер, он будет вам помагать. С ним вы будете хоть и говнокодить, но красиво
    Ответ написан
    2 комментария
  • Над чем нужно работать, что улучшать?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    1. Закомментированный код на гитхабе - не хорошо. https://github.com/marinarodkin/aviasales-app/blob...
    2. Минимум логики в render функции компонента. Все сложные конструкции переносите в методы, а лучше в отдельные компоненты (тогда сможете легче контролировать перерисовку компонентов через shouldComponentUpdate , чтобы они не перерисовывались, если данные не поменялись). Вы можете прямо как методы писать стрелочные функции:
      class Flight extends Component {
          getWeekDay = (date) => {
              //..
          }
          // ....
      }

    3. Вы в половине случаев используете точку с запятой, а в половине нет. Используйте чаще.
    4. Атрибут for нельзя использовать в jsx (как и class, как вы знаете). Вместо for пишите htmlFor
    5. Смотрите консоль инструментов разработчика, там есть ошибки.
    6. Освойте shouldComponentUpdate, он позволяет контролировать перерисовку компонента при изменении состояния или пропсов. У вас при изменении кол-во пересадок, перерисовывается весь список билетов, даже те, которые уже были в этом списке. Многие скажут, что еще рано такое учить, но я не согласен. Если не учиться контролировать перерисовку еще в начале обучения, то можно написать очень много тормознутого софта.
    7. У вас данные ticket.json подгружаются хардкодно из github, это не хорошо, т.к. этот файлик с данными есть в папке public, и если потенциальный работодатель захочет поменять там что-то, он не увидит изменений (т.к. грузится с гитхаба).
    8. У вас если в данных в параметре departure_date стоит 11.10.2018 (т.к. сегодня), то отобразится это как "11 окт 2018, вс", т.е. день недели неправильный. А он неправильный потому, что это не октябрь, а ноябрь. Ошибка в методе getDateFormat
      const newDate  = new Date (year, month, day, );
      const monthName = ["дек", "янв", "фев", "мар", "апр", "мая", "июня", "июля", "авг", "сент", "окт", "ноя", "дек"];
      const newMonth = monthName[newDate.getMonth()];

      конструктор Date вторым аргументом ожидает номер месяца, нумерация которого начинается с нуля. т.е. 0 - январь, 1 - февраль, 11 - декабрь. Судя по monthName вы подозвевали, что есть что-то неладное, но ошибись с реализацией. monthName должен иметь обычный вид, начинаться с января и заканчиваться декабрем, т.к. нулевой элемент массива как раз подходит по логике с нулевым месяцем. В getDateFormat, а также в getWeekDay, вычтите из month - 1
      const newDate = new Date(year, month - 1, day)
    9. У вас в тех же getDateFormat и getWeekDay в конструкторе Date вы в конце аргументов пишите запятую, так не нужно делать. Это не вредно и не полезно, просто дурной тон. Там в любом случае будет undefined, хоть с запятой хоть без нее.
    10. Картинки тоже грузятся с marinarodkin.github.io, измените.

    11. const getStopsNumber = (stop) =>{
            switch (stop) {
              case 3:
                return "3 пересадки"
              case 2:
                return "2 пересадки"
              case 1:
                return "1 пересадка"
              case 0:
                return "без пересадок"
              default:
                return // это не нужно делать, писать return. Если вы удалите эту (и строку выше), то результат будет такой же - undefined
            }
          }

    12. Если бы в SideBar пропс stopsData был не объектом, а строкой или числом, то компонент SideBar можно было бы безболезненно превратить в PureComponent. Ну это так, к слову об оптимизации.
    13. Я бы в stopsClick передавал не объект события e, из которого вы потом берете id элемента через e.target.id (что не есть гуд), а сделал бы стрелочную функцию (или bind), в которую бы передавал id. Вот так
      <input onClick={() => this.props.stopsClick("allStops")} />
      <input onClick={() => this.props.stopsClick("noStops")} />

      Если это читают опытные ReactJS разработчики, рассудите пожалуйста. Согласен, что на каждый компонент будет создана своя копия функции, но по крайней мере, не нужно взаимодействовать с DOM напрямую.
    14. Это не красиво
      if( this.state.stops.allStops === false && this.state.stops.noStops === true && this.state.stops.oneStop === true && this.state.stops.twoStop === true && this.state.stops.threeStop === true  ){
               newStops = {...this.state.stops, allStops: true}
          }

      мне кажется, на дальнейшую логику это никак не играет роли, лишь создает глюк, когда выбираешь все чекбоксы кроме "все", и если кликнуть после этого на один из них, он не отожмется, а лишь включится чекбокс "все".
    15. Попробуйте везде сократить повторяющиеся конструкции. Например начните с stopsClick Не говорю, что у вас сразу получится, это приходит с опытом. Но просто попытайтесь подумать, как это можно сократить.


    Может я многое высосал из пальца, но это будет вам полезно. Учитесь, развивайтесь. Удачи вам в этом :-)
    Ответ написан
    1 комментарий
  • Как обновлять state при обновлении props?

    0xD34F
    @0xD34F Куратор тега React
    Если я обновляю state в componentDidUpdate выводит ошибку о бесконечном цикле.

    Добавьте проверку, что изменились именно props:

    componentDidUpdate(prevProps, prevState) {
      if (this.props.currentSearch !== prevProps.currentSearch) {
        // ваш код с вызовом setState
      }
    }
    Ответ написан
    Комментировать
  • Как в реакте узнать, что компонент промонтировался?

    @khorark
    Метод ComponentDidMount срабатывает тогда, когда компонент примонтирован. Полная инфомарция по методам ЖЦ React здесь .
    Ответ написан
    Комментировать
  • Существуют ли задачники по реляционной алгебре и нормализации баз данных?

    Это вы хорошо спросили). Вот что удалось найти:
    db4u.wikidot.com/normexercises
    https://cs.senecac.on.ca/~dbs201/pages/Normalizati...
    https://web.csulb.edu/~mopkins/cecs323/morenormali...

    https://lagunita.stanford.edu/courses/DB/RA/SelfPa...
    https://www.seas.gwu.edu/~bhagiweb/cs2441/lectures...

    Фигня конечно, поэтому подпишусь на вопрос, хорошие упражнения пригодились бы. На русском искать даже пробовать не буду.
    Ответ написан
    Комментировать
  • Учебник по математике, при почти нулевых знаниях?

    @maksnest
    Глубокоуважаемые, вы реально не понимаете сути вопроса: знания на уровне 6го класса - это примерно начало линейных уравнений. О какой дискретной математике идет речь?
    Я работал несколько лет репетитором по математике (уже пару лет, как отошел от дел), так вот хочу задать пару вопросов:
    1) "Спустя год работы java разработчиком" - что включает это понятие?
    2) насколько вам "нравится" математика сейчас, если слово "нравится" можно применить в этом контексте?

    Интернеты пестрят холиварами на тему того, насколько важна математика для программиста и т д., но не в этом суть. Суть в том, что SeptiM очень верно заметил про дискретку, но добраться до нее с вашего уровня практически невозможно эдаким "хотением и рвением" только.

    Если вы задались целью реально углубить знания по математике:
    1) начинайте с элементарных вещей (книги и ресурсы в ответах поданы) и запаситесь ну просто мегатерпением.
    2) спланируйте свое время, скажем на 6 месяцев вперед (исходя из общего списка тем, которые хотите пройти. Математика гораздо проще в планировании, нежели литература или история. Здесь общий костяк во всех учебниках один)
    3) изучайте поступательно, решая массу задач на каждую тему. Изученная тема - значит, возможность решить любую задачу среднего уровня
    4) найдите ментора/учителя/советника... Хотя бы на первое время. Вам главное научиться учиться этому предмету.

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

    У меня дискретной математики не было, но решал бы так. Есть утверждения:
    Л: Пс Бд
    П: Лс Бд
    Б: Лс Пе

    Найдём пару утверждений из которых один оба раза сорвал, другой оба раза сказал правду. Поскольку утверждения Л-П связаны через Бд, а П-Б через Лс, остаётся пара Л-Б – кто-то из них оба раза правда, другой оба раза ложь.

    Ложное утверждение обозначу с воскл. знаком (логическое НЕ) – например, !Лс.

    Итак, один раз соврал и один сказал правду, выходит, Пончик: П: !Лс Бд

    Чтобы Лс было ложным, надо так же сделать ложными утверждения Б. Значит, Б оба раза соврал, а Л оба раза сказал правду:
    Л: Пс Бд
    П: !Лс Бд
    Б: !Лс !Пе

    Итого, точно знаем: Пс и Бд. Остаётся Ле.
    Ленчик – ель; Пончик – сосна; Батончик – дуб.

    upd. Таблица истинности так составляется?
    Л П Б  Пс Бд  Лс Бд  Лс Пе
    0 1 2  0  0   1  1   0  1  конфликт Бд и Лс
    0 2 1  0  0   0  1   1  1  конфликт Бд и Лс  
    1 0 2  1  1   0  0   0  1  конфликт Бд
    2 0 1  0  1   0  0   1  1  конфликт Бд и Лс
    1 2 0  1  1   0  1   0  0  ОК
    2 1 0  0  1   1  1   0  0  конфликт Лс

    Переменные три: истинность утверждений каждого персонажа. Три возможных состояния: 0 – оба раза соврал, 1 – оба раза правда, 2 – соврал-правда. Дальше раскрываем их значение по каждому из утверждений (0 ложь, 1 истина). Во всех вариантах, кроме одного возникают логические конфликты.
    Ответ написан
    Комментировать
  • Какие книги стоит прочитать начинающему программисту, чтобы понять все тонкости программирования?

    Сначала определитесь с направлением, что вам интересно (системное программирование, разработка игр аль еще что), дальше определяйтесь с языком программирования (частично зависит от 1 пункта, но мое ИМХО Начинайте с С, при необходимости ASM, ну а после этого любой объектно-ориентированный язык будет не проблемой), после чего, как Вам уже верно посоветовали, алгоритмы, теорию ОС, параллельно с выбранным языком (языками).
    После чего прокачиваемся по легендарным книгам, типа
    - Совершенный код
    - Рефакторинг
    - Паттерны проектирвоания (например от банды 4)
    - Шаблоны корпоративных приложений (а вообще всего М.Фаулера ))) )
    - прочее ( на хабре миллион раз писали, поиск Вам в руки)

    Успехов!
    Ответ написан
    1 комментарий